需求:
多进程,加快程序运行。
from multiprocessing import Pool, TimeoutError
from multiprocessing import cpu_count
import time
import os
def f(x):
time.sleep(1)
return [x*x, x*x], x,'success'
if __name__ == '__main__':
start = time.time()
pool = Pool(processes=8)
processTask = []
aaa = [10,20,30,40]
for i in range(4):
processTask.append(pool.apply_async(f, (aaa[i],)))
pool.close()
pool.join()
print(processTask[0].get()[0])
print(processTask[1].get()[1])
print(processTask[2].get()[2])
print(processTask[3].get())
print('end1:',time.time()-start)
start = time.time()
aaa = [10,20,30,40]
for i in range(4):
print(i, f(aaa[i]))
print('end2:',time.time()-start)
print("CPU的核数为:{}".format(cpu_count()))
结果输出:
[100, 100]
20
success
([1600, 1600], 40, 'success')
end1: 1.7120087146759033
0 ([100, 100], 10, 'success')
1 ([400, 400], 20, 'success')
2 ([900, 900], 30, 'success')
3 ([1600, 1600], 40, 'success')
end2: 4.003762722015381
CPU的核数为:8
———————————————————————————————————————
if __name__ == '__main__':
start = time.time()
aaa = [10,20,30,40]
processTask = []
pool = Pool(processes=4)
for i in range(4):
processTask.append(pool.apply_async(f, (aaa[i],)) )
print(processTask[-1].get())
pool.close()
pool.join()
print('end1:',time.time()-start)
start = time.time()
aaa = [10,20,30,40]
for i in range(4):
f(aaa[i])
print('end2:',time.time()-start)
print("CPU的核数为:{}".format(cpu_count()))
结果输出:
([100, 100], 10, 'success')
([400, 400], 20, 'success')
([900, 900], 30, 'success')
([1600, 1600], 40, 'success')
end1: 4.513966083526611
end2: 4.002805233001709
CPU的核数为:8
综合示例1和2,发现在进程池内部添加返回结果操作会导致程序变慢,每个子进程运行完才执行下一步。实际使用建议使用示例1代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)