我最近开始学习python中的多处理。对此,我有一些问题。以下代码显示了我的示例:
import multiprocessing
from time import *
def func(n):
for i in range(100):
print(i, "/ 100")
for j in range(100000):
a=j*i
b=j*i/2
if __name__ == '__main__':
#Test with multiprosessing
pool = multiprocessing.Pool(processes=4)
t1 = clock()
pool.map(func, range(10))
pool.close()
t2 = clock()
print(t2-t1)
#Test without multiprocessing
func(range(10))
t3 = clock()
print(t3-t2)
print
命令不起作用?答案 0 :(得分:4)
它确实一次向您的流程池提交四个流程。您的多处理示例正在运行func
十次,而普通呼叫仅运行一次。此外,启动进程有一些运行时开销。这些可能解释了运行时间的差异。
我认为一个更简单的例子是有益的。 func
现在睡了五秒钟,然后打印出输入n
以及时间。
import multiprocessing
import time
def func(n):
time.sleep(5)
print([n, time.time()])
if __name__ == '__main__':
#Test with multiprosessing
print("With multiprocessing")
pool = multiprocessing.Pool(processes=4)
pool.map(func, range(5))
pool.close()
#Test without multiprocessing
print("Without multiprocessing")
func(1)
pool.map(func, range(5))
运行func(0)
,func(1)
,...,func(4)
。
此输出
With multiprocessing
[2, 1480778015.3355303]
[3, 1480778015.3355303]
[1, 1480778015.3355303]
[0, 1480778015.3355303]
[4, 1480778020.3495753]
Without multiprocessing
[1, 1480778025.3653867]
请注意,前四个是同时输出,而不是严格按顺序输出。第五个(n == 4
)在五秒后得到输出,这是有意义的,因为我们有一个包含四个进程的池,并且只有在前四个进程完成后才能启动。