多处理时在哪里调用 join()
Where to call join() when 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()
比这个更常见:
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 秒!.
在 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 秒!.