Skip to main content
 首页 » 编程设计

python之多处理时在哪里调用 join()

2025年05月04日22shihaiming

在 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 秒!。