我已经做了一个简单的例子,说明由于某种原因将python多重处理错误包装在函数中。有什么办法解决吗?
此代码有效:
from multiprocessing import Pool
import time
def _foo(my_number):
square = my_number * my_number
time.sleep(1)
return square
with Pool() as p:
r = list(p.imap(_foo, range(10)))
print(r)
此代码不:
from multiprocessing import Pool
import time
def test():
def _foo(my_number):
square = my_number * my_number
time.sleep(1)
return square
with Pool() as p:
r = list(p.imap(_foo, range(30)))
print(r)
test()
出现错误消息AttributeError: Can't pickle local object 'test.<locals>._foo'
。
还有其他与此相关的问题,但是我很确定这不会侵犯任何这些问题。特别是,Pool()
会在它需要的所有内容(_foo
)之后启动。
那么一个人应该如何使用该函数中定义的内容从一个函数中调用多处理呢?