Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中使用函数multiprocessing.Pool会产生奇怪的结果?_Python_Python 3.x_Multiprocessing_Python 3.6 - Fatal编程技术网

python中使用函数multiprocessing.Pool会产生奇怪的结果?

python中使用函数multiprocessing.Pool会产生奇怪的结果?,python,python-3.x,multiprocessing,python-3.6,Python,Python 3.x,Multiprocessing,Python 3.6,以下是代码: 一: 另一个: 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: res

以下是代码:

一:

另一个:

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秒。 为什么?list.append会阻止进程吗?

否,
append()
不会阻止,但
.get()
会阻止。
.get()
的目的是阻止。在

res1 = [p.apply_async(jia,(i,1,1)) for i in a]
res1 = [i.get() for i in res1]
在第二行调用任何
.get()
之前,所有工作都由第一行提供给池。但是在

for i in a:
    res1.append(p.apply_async(jia,(i,1,1)).get())
.get()
在允许循环继续甚至开始下一项工作之前,等待一项工作完成。您已经序列化了工作-没有任何有用的并行操作。

不,
append()
不会阻止,但是
.get()
会阻止。
.get()
的目的是阻止。在

res1 = [p.apply_async(jia,(i,1,1)) for i in a]
res1 = [i.get() for i in res1]
在第二行调用任何
.get()
之前,所有工作都由第一行提供给池。但是在

for i in a:
    res1.append(p.apply_async(jia,(i,1,1)).get())

.get()
在允许循环继续甚至开始下一项工作之前,等待一项工作完成。您已经序列化了工作-没有任何有用的并行操作。

乍一看,
get
是一个阻塞方法。
p.apply\u async(..).get()
是一个阻塞操作。乍一看,
get
是一个阻塞方法。
p.apply\u async(..).get()
是一个阻塞操作。