exec命令中的多处理

时间:2015-01-04 00:10:41

标签: python multiprocessing

我需要在一段代码中使用多处理,这段代码以字符串形式注入exec函数:

code = """
from multiprocessing import Process

def f(name):
    print('hello', name)

p = Process(target=f, args=('bob',))
p.start()
p.join()
"""

if __name__ == '__main__':
   exec(code)

我收到以下错误:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Programming\WinPython-64bit-3.3.5.0\python-3.3.5.amd64\lib\multiprocessing\forking.py", line 351, in main
self = load(from_parent)
AttributeError: 'module' object has no attribute 'f'

我是多处理的新手......我必须说我不知道​​出了什么问题。我的系统是Windows 7 64位。

更新:...还有一个更普遍的问题:是否可以在另一个进程中异步运行用户定义的脚本(存储在字符串中)?这实际上是我试图实现的目标。

3 个答案:

答案 0 :(得分:1)

我认为您可能会遇到与此处所见相同的缩进问题:Python AttributeError: Object has no attribute请尝试确保您的print和exec行已正确标记。

答案 1 :(得分:0)

multiprocessing 要求 target函数可以通过__main__模块中的子进程导入。这里,所述模块没有定义f,因此不满足约束(即使某些操作系统设法让你放松约束,这是一种可怕的做法,并且会破坏代码的可移植性)。

我建议您分析code字符串,例如通过compile内置字符串,并确保所需__main__的{​​{1}}级定义。

答案 2 :(得分:0)

这是一个老问题......无论如何,以下工作:

script = """
from multiprocessing import Process

def f(name):
    print('hello', name)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()
"""
exec(script)