【发布时间】:2020-09-18 03:45:24
【问题描述】:
我正在观看关于多处理的教程https://www.youtube.com/watch?v=fKl2JW_qrso(显示在 8.18 分钟)。我正在运行从那里复制的代码:
import multiprocessing
import time
import os
start = time.perf_counter()
def do_something():
print("sleeping 1 sec...")
time.sleep(1)
print("done sleeping...")
p1 = multiprocessing.Process(target=do_something)
p2 = multiprocessing.Process(target=do_something)
p1.start()
p2.start()
finish = time.perf_counter()
print("finished in " + str(round((finish-start),2)) + " seconds(s)")
os.system("pause")
但是当我在我的计算机上运行它时,我收到了以下错误消息(但相同的代码在教程中也可以使用):
在 当前进程已完成其引导阶段。这可能意味着您没有使用 fork 来启动您的 子进程,您忘记使用正确的成语 在主模块中: 如果 name == 'main': 冻结支持() ... 如果程序可以省略“freeze_support()”行 不会被冻结以生成可执行文件。
【问题讨论】:
-
你需要一个 if name__=='__main': 你调用多处理的块
-
我不明白为什么它适用于教程...
-
会不会是因为在windows机器上运行不一样?
-
该代码在 python3 中运行良好。您最好尝试在最后加入新流程
p1.join(); p2.join()