所以我对多重处理还比较陌生,主要是想弄清楚。终于有了一个简单的小程序。本质上,我希望它打开一个CSV文件并将I附加到一个新行
我成功了。奇怪的是,多处理比不使用多处理要慢得多
有人能给我解释一下吗
多处理.py
import csv
import multiprocessing
def wrtCSV(i):
with open('test.csv', 'a') as newFile:
newFileWriter = csv.writer(newFile)
newFileWriter.writerow([str(i)])
if __name__ == '__main__':
jobs = []
for i in range(100000):
p = multiprocessing.Process(target=wrtCSV, args=(i,))
jobs.append(p)
p.start()
正常.py
import csv
def wrtCSV(i):
with open('test.csv', 'a') as newFile:
newFileWriter = csv.writer(newFile)
newFileWriter.writerow([str(i)])
if __name__ == '__main__':
for i in range(100000):
wrtCSV(i)
normal.py
更快的一个原因可能是文件不能被所有进程同时访问(如注释中所指出的)只有在必要的时候才使用不同的流程也是很重要的。例如,如果您想在100个不同的图像上运行深度学习分类器,如果您使用常规方法,则需要时间。但是如果你在进程之间划分任务,你会注意到加速
因此,我认为只有当您希望流程执行一些繁重的处理时才应该使用流程(现在您只是在单个文件中编写)。因为每次使用
multiprocessing.Process
时,它都会生成一个新进程(创建进程控制块,新进程继承资源,为其状态保留内存,几乎没有额外的开销),而生成进程是一个缓慢的过程如果您真的想比较两者的性能,可以制作单独的文件并在循环中进行一些计算
正常.py
多处理.py
检查这些文件,如果需要,还可以增加范围
相关问题 更多 >
编程相关推荐