执行命令中的多处理
multiprocessing inside exec command
我需要在一段代码中使用多处理,该代码作为字符串注入到 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 位。
更新:...还有一个更普遍的问题:是否可以在另一个进程中异步运行用户定义的脚本(存储在字符串中)?这实际上是我试图实现的目标。
multiprocessing
要求 target
函数可由 __main__
模块的子进程导入。在这里,所述模块未定义 f
,因此不满足约束(即使某些操作系统设法让您放宽约束,但这是糟糕的做法,并且会破坏代码的可移植性)。
我建议分析 code
字符串,例如通过 compile
内置,并确保所需 target
的 __main__
级定义。
我认为您可能 运行 遇到与此处所见相同的缩进问题:Python AttributeError: Object has no attribute 尝试确保您的 print 和 exec 行正确制表。
这是一个老问题...无论如何,以下工作:
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)
我需要在一段代码中使用多处理,该代码作为字符串注入到 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 位。
更新:...还有一个更普遍的问题:是否可以在另一个进程中异步运行用户定义的脚本(存储在字符串中)?这实际上是我试图实现的目标。
multiprocessing
要求 target
函数可由 __main__
模块的子进程导入。在这里,所述模块未定义 f
,因此不满足约束(即使某些操作系统设法让您放宽约束,但这是糟糕的做法,并且会破坏代码的可移植性)。
我建议分析 code
字符串,例如通过 compile
内置,并确保所需 target
的 __main__
级定义。
我认为您可能 运行 遇到与此处所见相同的缩进问题:Python AttributeError: Object has no attribute 尝试确保您的 print 和 exec 行正确制表。
这是一个老问题...无论如何,以下工作:
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)