我有一段代码存储在字符串中(用户在我的应用程序的文本框中编辑它)。在这段代码中,我想稍后使用multiprocess.Pool
运行一个函数。但如果字符串中定义的函数是嵌套的,则不起作用。在
请注意,我使用的是multiprocess
,而不是标准的multiprocessing
,它根本无法运行字符串中定义的函数。在
请参阅下面片段中的注释以了解发生了什么。在我的场景中有什么解决方法可以使用吗?在
funcs = """
def func(x):
return func_inner(x) + 1
def func_inner(x):
return x + 1
"""
import multiprocess
if __name__ == "__main__":
symbols = dict()
exec(funcs, symbols)
func = symbols["func"]
print(func(1)) # this is evaluated correctly as 3 so nesting functions work fine!
data = [1, 2, 3]
pool = multiprocess.Pool()
print(pool.map(func, data)) # this fails with NameError: name 'func_inner' is not defined!
我在Windows和Linux上也尝试过。我的multiprocess
版本是0.70.5和python3.5。在
似乎您只是缺少了基于字符串的函数的
compile()
:我的输出:[3,4,5]
更新: 我的多进程版本是-0.70.4 尝试下面的脏修补程序,应该对您有用:
^{pr2}$相关问题 更多 >
编程相关推荐