首页 > 解决方案 > Python 多处理不使用可用的核心

问题描述

我在简单的 Python 程序下面运行 - 分别执行 4 个进程。我希望程序在 4 秒内完成执行(正如您在代码中看到的那样),但它需要 10 秒 - 这意味着它不进行并行处理。我的 CPU 中有超过 1 个内核,但程序似乎只使用了一个。请指导我如何在这里实现并行处理?谢谢。

import multiprocessing
import time
from datetime import datetime

def foo(i):
    print(datetime.now())
    time.sleep(i)
    print(datetime.now())
    print("=========")

if __name__ == '__main__':
    for i in range(4,0,-1):
        p = multiprocessing.Process(target=foo, args=(i,))
        p.start()
        p.join()
    print("Done main")

标签: pythonmultiprocessingcpu-cores

解决方案


每当您调用join一个进程时,您的执行都会阻塞并等待该进程完成。因此,在您的代码中,您总是在开始下一个过程之前等待最后一个过程完成。您需要保留对进程的引用以及join在所有进程启动后对它们的引用,例如。像这样:

if __name__ == '__main__':
    processes = [multiprocessing.Process(target=foo, args=(i,))
                 for i in range(4,0,-1)]
    for p in processes: 
        p.start()
    for p in processes:
        p.join()
    print("Done main")

推荐阅读