首页
TVP 最新优惠活动
学习
活动
专区
工具
返回腾讯云官网
采用网上的一个利用复制文件来检测多进程和单进程差异的例子。但是例子中许多关键的解释并未给出,反而给入门新手造成了很多不必要的困扰和门槛。
以下的解释重点有两个,1是怎么运行多进程(我测试了多台电脑,具体为什么运行不了,我也不知道,只能按照我自己的方法解释如何可以在我测试的几台电脑上运行)。2是关键性的代码解读。
第一个问题的解答:首先,创建两个工程文件,一个是单进程,一个是多进程。其中多进程无法使用选中部分代码然后ctrl+enter的方式运行,必须运行全部代码,在工程文件上方的运行按钮运行。
其中多进程代码:
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 28 18:00:53 2019
@author: Administrator
"""
from multiprocessing import Pool,Manager
import time
import os
import shutil
import random
start = time.time()
def copyFile(file_name,old_folder_name,new_folder_name,q):
time.sleep(random.random())
shutil.copyfile(old_folder_name+"/"+file_name,new_folder_name+"/"+file_name,)
q.put(file_name)
def main():
pool = Pool(5)
q = Manager().Queue()
old_folder_name = 'D:/minxinan/temp1'
new_folder_name = 'D:/minxinan/temp2'
os.mkdir(new_folder_name)
file_name_list = os.listdir(old_folder_name)
for value in file_name_list:
pool.apply_async(copyFile,args=(value,old_folder_name,new_folder_name,q))
count = 0
allLength = len(file_name_list)
while count < allLength:
message = q.get()
count += 1
print("\r正在拷贝%s,拷贝的进度是:%d%%"%(message,(count/allLength)*100),end="")
print("\n拷贝完毕")
if __name__ == "__main__":
main()
end = time.time()
print("多进程花费的时间:%#.2fs"%(end-start))
其中,单进程代码
# -*- coding: utf-8 -*-
"""
Created on Sun Sep 1 21:54:57 2019
@author: Administrator
"""
import time
import os
import shutil
import random
start = time.time()
def copyFile(file_name,old_folder_name,new_folder_name):
time.sleep(random.random())
shutil.copyfile(old_folder_name+"/"+file_name,new_folder_name+"/"+file_name,)
def main():
old_folder_name = 'D:/minxinan/temp1'
new_folder_name = 'D:/minxinan/temp3'
os.mkdir(new_folder_name)
file_name_list = os.listdir(old_folder_name)
count = 0
allLength = len(file_name_list)
for value in file_name_list:
copyFile(value,old_folder_name,new_folder_name)
count += 1
print("\r正在拷贝%s,拷贝的进度是:%d%%" % (value, (count / allLength) * 100), end="")
print("\n拷贝完毕")
if __name__ == "__main__":
main()
end = time.time()
print("单进程花费的时间:%#.2fs"%(end-start))
运行结果对比:
对于第二部分的解释:
解释:
其中代码中的copyFile函数中有一句:
time.sleep(random.random())
这是造成时间差异的关键,是这句代码造成的文件复制速度慢(不论是单进程还是多进程),速度慢的目的是为了检验多进程速度比单进程快,为什么呢?因为
1, time.sleep相当于暂停,单进程复制50个文件,暂停了50次,而多进程复制只有暂停了12.5次,所以速度快了。
2,文件复制属于io密集型处理,不是多进程擅长的,如果把 time.sleep去掉,单进程的速度会比多进程快。
以上大致就是为什么加 time.sleep来测试多进程的原因。
我的内容已经很入门了。。。。
本文分享自 一个有趣的灵魂W 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
玻璃钢生产厂家渭南玻璃钢雕塑厂家北京开业商场美陈有哪些黑龙江玻璃钢雕塑工程玻璃钢人物雕塑蕴意烟台市玻璃钢人物雕塑水富市玻璃钢雕塑批发广西卡通造型玻璃钢雕塑价格菏泽玻璃钢浮雕动物雕塑富阳区玻璃钢雕塑方案池州户外玻璃钢雕塑商场组合玻璃钢花盆福建走廊商场美陈订购商场国庆70周年活动美陈南京玻璃钢花盆价钱江苏玻璃钢雕塑设计品质玻璃钢雕塑重庆玻璃钢桃子雕塑秦皇岛玻璃钢雕塑厂杭州商场玻璃钢雕塑摆件盐亭玻璃钢花盆花器杭州玻璃钢雕塑摆件生产德州不锈钢水景玻璃钢雕塑个性化玻璃钢雕塑设计河北装饰商场美陈报价佛山透光玻璃钢雕塑供应商湘潭玻璃钢伟人像雕塑玻璃钢雕塑产品制作湘西玻璃钢座椅雕塑价格园林玻璃钢雕塑制造商徐州玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万