在Python中使用多重处理时,我通常会看到一些示例,其中join()
在一个单独的循环中调用了该函数,而该循环实际上是创建每个进程的地方。
例如,这:
processes = []
for i in range(10):
p = Process(target=my_func)
processes.append(p)
p.start()
for p in processes:
p.join()
比这更常见:
processes = []
for i in range(10):
p = Process(target=my_func)
processes.append(p)
p.start()
p.join()
但是据我了解join()
,它只是告诉脚本在该过程完成之前不要退出。因此,何时join()
调用无关紧要。那么,为什么通常在单独的循环中调用它呢?
join()
正在阻止操作。
在第一个示例中,您启动了10个进程,然后等待所有过程完成。所有进程同时运行。
在第二个示例中,您一次启动一个进程,然后等待完成,然后再启动另一个进程。同时只有一个正在运行的进程
第一个例子:
def wait()
time.sleep(1)
# You start 10 processes
for i in range(10):
p = Process(target=wait)
processes.append(p)
p.start()
# One second after all processes can be finished you check them all and finish
for p in processes:
p.join()
整个脚本的执行时间可以接近一秒钟。
第二个例子:
for i in range(10):
p = Process(target=wait) # Here you start one process
processes.append(p)
p.start()
p.join() # Here you will have to wait one second before process finished.
整个脚本的执行时间可以接近10秒!。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句