有以下简单的代码:

from multiprocessing import Process, freeze_support

def foo():
    print 'hello'

if __name__ == '__main__':
    freeze_support()
    p = Process(target=foo)
    p.start()

它在Linux或带Python 3.3的Windows上运行良好,但在带Python 2.7的Windows上运行失败。
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "c:\Python27\lib\multiprocessing\forking.py", line 346, in main
    prepare(preparation_data)
  File "c:\Python27\lib\multiprocessing\forking.py", line 454, in prepare
    assert main_name not in sys.modules, main_name
AssertionError: thread

一般来说,我尝试过的所有多处理示例在该设置上均失败。为什么?

最佳答案

这是一个已知的错误:

http://bugs.python.org/issue10845

不知道这是否会移植到2.7.X。

关于Windows上的Python 2.7,所有多处理示例均使用 "assert main_name not in sys.modules, main_name",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16405687/

10-12 05:46