Kar*_*rus 1 python python-multiprocessing
在Python中使用多处理时,我通常会看到一些示例,其中join()函数在一个单独的循环中调用,以实际创建每个进程.
例如,这个:
processes = []
for i in range(10):
p = Process(target=my_func)
processes.append(p)
p.start()
for p in processes:
p.join()
Run Code Online (Sandbox Code Playgroud)
比这更常见:
processes = []
for i in range(10):
p = Process(target=my_func)
processes.append(p)
p.start()
p.join()
Run Code Online (Sandbox Code Playgroud)
但是根据我的理解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()
Run Code Online (Sandbox Code Playgroud)
整个脚本的执行时间可能接近一秒.
第二个例子:
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.
Run Code Online (Sandbox Code Playgroud)
整个脚本的执行时间可能接近10秒!.