【问题标题】:Multi-processing skip beginning多处理跳过开始
【发布时间】:2021-07-06 19:42:36
【问题描述】:

我对 python 和多处理模块很陌生。我想知道如何使该过程跳过开头,以免重复。任何帮助将不胜感激:)

print("Doing something!!!")

代码:

import multiprocessing

print("Doing something!!!")

def stuff():
    print("Doing stuff")

if __name__  == '__main__':
    p1 = multiprocessing.Process(target=stuff)
    p1.start()

输出:

Doing something!!!
Doing something!!!
Doing stuff

期望的输出:

Doing something!!!
Doing stuff

【问题讨论】:

  • 如果您在 Windows 上,则不能。如果你在 macos 或 linux 上,你可以使用 fork 而不是 spawn 使用:multiprocessing.set_start_method("fork")。您可能应该阅读差异以了解 spawn 与 fork 的含义
  • 谢谢@Aaron!

标签: python python-3.x multiprocessing python-multiprocessing


【解决方案1】:

请参阅文档中的multiprocessing Programming Guidelines

在使用“spawn”或“forkserver”方法创建进程的系统上:

确保新的 Python 解释器可以安全地导入主模块,而不会导致意外的副作用(例如启动新进程)。

您的脚本被导入到每个进程中,因此它将在所有进程中运行任何全局代码。只需将任何全局内容移动到 if __name__ == '__main__': 部分:

import multiprocessing

def stuff():
    print("Doing stuff")

if __name__  == '__main__':
    print("Doing something!!!")
    p1 = multiprocessing.Process(target=stuff)
    p1.start()

这确保函数stuff() 将被导入并在每个进程中定义,但您的print 只会在主进程中运行一次。

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 2016-12-20
    • 1970-01-01
    • 2015-07-04
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多