代码如下:
一:
import multiprocessing
import datetime
import time
a = [i for i in range(100)]
res1 = []
def jia(a,b,c):
time.sleep(0.1)
return a + b + c
res1_time_start = datetime.datetime.now()
p = multiprocessing.Pool(4)
res1 = [p.apply_async(jia,(i,1,1)) for i in a]
res1 = [i.get() for i in res1]
res1_time_end = datetime.datetime.now()
print((res1_time_end - res1_time_start).seconds)
另一个:
import multiprocessing
import datetime
import time
a = [i for i in range(100)]
res1 = []
def jia(a,b,c):
time.sleep(0.1)
return a + b + c
res1_time_start = datetime.datetime.now()
p = multiprocessing.Pool(4)
for i in a:
res1.append(p.apply_async(jia,(i,1,1)).get())
res1_time_end = datetime.datetime.now()
print((res1_time_end - res1_time_start).seconds)
奇怪的结果是前者花费2.5秒,而后者花费10秒。 为什么?做列表.append阻止进程?你知道吗
不,
append()
不阻止,但是.get()
阻止。阻止是.get()
的目的。在all在第二行调用任何
.get()
之前,工作由第一行提供给池。但是在.get()
在允许循环继续甚至开始下一个工作之前,等待单个工作完成。你已经序列化了工作-没有任何有用的并行发生。你知道吗相关问题 更多 >
编程相关推荐