多处理进程不运行

Posted

技术标签:

【中文标题】多处理进程不运行【英文标题】:Multiprocessing process does not run 【发布时间】:2022-01-05 13:44:15 【问题描述】:

我一直在尝试运行一个非常简单的多处理程序(下面的脚本)。但是,我得到的输出很简单:"Finished"。进程或函数都不会产生任何输出。如何确保它们确实运行并且我得到类似于 "Function 1" "Function 2" "Finished" 的输出?

抱歉,如果这是一个重复的问题,任何帮助将不胜感激。

import multiprocessing

def func(n):
    print('Function',n)

p1 = multiprocessing.Process(target=func, args=(1, ))
p2 = multiprocessing.Process(target=func, args=(2, ))

p1.start()
p2.start()

p1.join()
p2.join()

print("Finished")

计算机信息:Python 版本 3.8.8、macOS 12.0.1、Apple M1 芯片

【问题讨论】:

根据操作系统,您不会在控制台上收到子进程的标准输出输出。 多处理启动新进程,你确定它没有运行,只是输出到无处可去的标准输出?例如,您是否尝试过在此过程中创建一个文件而不是仅仅打印一些东西? 啊,是的,谢谢!将输出发送到文件有效。有没有办法让它实际打印到控制台? 【参考方案1】:

尝试将__name__ == '__main__' 添加到您的代码中,以确保新的 Python 解释器可以安全地导入主模块,而不会导致意外的副作用。

def func(n):
    print('Function',n)

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=func, args=(1, ))
    p2 = multiprocessing.Process(target=func, args=(2, ))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print("Finished")

来源:Python docs

【讨论】:

也试过了,结果一样。 这很奇怪,它在我的 M1 芯片上对我有用,但在 python 3.9.2 上。也适用于 python 2.7 好的,我会尝试更新到 Python 3.9。也许这会奏效

以上是关于多处理进程不运行的主要内容,如果未能解决你的问题,请参考以下文章

Python多处理:在父进程退出后运行进程

如何使用多处理在Python中运行多个异步进程?

电脑进程数太多怎么办

Python 多处理线程 Asyncio

进程的状态与转换

如何找到理想数量的并行进程以使用 python 多处理运行?