【问题标题】:Multiprocess Python: Working code of a tutorial doesn't work when I try it多进程 Python:当我尝试它时,教程的工作代码不起作用
【发布时间】: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 == 'ma​​in': 冻结支持() ... 如果程序可以省略“freeze_support()”行 不会被冻结以生成可执行文件。

【问题讨论】:

  • 你需要一个 if name__=='__main': 你调用多处理的块
  • 我不明白为什么它适用于教程...
  • 会不会是因为在windows机器上运行不一样?
  • 该代码在 python3 中运行良好。您最好尝试在最后加入新流程p1.join(); p2.join()

标签: python multiprocessing


【解决方案1】:

感谢您的所有 cmets。最后它起作用了。 所以基本上在windows中它需要以稍微不同的方式编写:

import multiprocessing
import time
import os

start = time.perf_counter()


def do_something():

    print("sleeping 1 sec...")
    time.sleep(1)

    print("done sleeping...")

if  __name__ == "__main__":
    p1 = multiprocessing.Process(target=do_something)
    p2 = multiprocessing.Process(target=do_something)

    p1.start()
    p2.start()

    p1.join()
    p2.join()

    finish = time.perf_counter()

    print("finished in " + str(round((finish-start),2))   + " seconds(s)")

    os.system("pause")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多