我运行了下面的简单Python程序,分别执行4个进程。我希望程序在4秒内完成执行(正如您在代码中看到的(,但它需要10秒——这意味着它不进行并行处理。我的CPU中有不止一个内核,但这个程序似乎只使用了一个。请指导我如何在这里实现并行处理?谢谢
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")
每当在进程上调用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")