【问题标题】:Python Multiprocessing Error?Python多处理错误?
【发布时间】:2013-09-13 02:56:53
【问题描述】:

我这几天一直在研究 Python 中的多处理模块。

但是,我遇到了一个我无法解决的奇怪问题。

源代码很简单,但运行这段代码后我无法得到任何结果。

代码如下:

import multiprocessing as multi

def worker():
    print "Worker!!!"
    return

jobs = []

for i in range(5):
    p = multi.Process(target = worker)
    jobs.append(p)
    p.start()

我原以为会打印五次“工人!!!”。

然而,我唯一拥有的是

* 重新初始化远程解释器 *

">>>"

">>>"

有没有人想办法解决这个问题??

请帮帮我!!!

【问题讨论】:

    标签: python-2.7 multiprocessing


    【解决方案1】:

    根据multiprocessing documentation

    注意

    此包中的功能要求 __main__ 模块可由孩子们导入。这在编程中有所介绍 指南但是值得在这里指出。这意味着一些 示例,例如 multiprocessing.Pool 示例 将无法使用 交互式解释器

    ...

    安全导入主模块

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

    ...

    应该使用 if 来保护程序的“入口点” __name__ == '__main__'

    所以你的程序应该如下所示:

    import multiprocessing as multi
    
    def worker():
        print "Worker!!!"
    
    if __name__ == '__main__':
        jobs = []
        for i in range(5):
            p = multi.Process(target = worker)
            jobs.append(p)
            p.start()
        for job in jobs:
            job.join()
    

    【讨论】:

    • 感谢您的快速建议。但是,您建议的代码的结果与我的相同。真的很奇怪。
    • @SkyChoi,您是否运行过交互式会话?或python script-name.py ?
    • @SkyChoi,尝试在终端中运行它(或者如果你使用 Windows,则使用 cmd.exe / powershell)。
    • @SkyChoi,如果您使用 PyScripter,请使用 External Run 而不是 Run
    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2020-09-19
    • 2014-07-15
    • 2012-12-11
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多