我有一个复杂的Python程序。我正在尝试使用多进程池来并行化它。我收到错误消息
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
。
追溯显示了政治家return send(obj)
我的假设是它导致问题的“obj”,我需要让它成为可挑剔的。
如何确定哪个对象是问题的原因?该计划很复杂,只是猜测可能需要很长时间。
答案 0 :(得分:0)
为什么不在return send(obj)之前添加一些日志记录?至少,这可能会有所帮助:
print repr(obj)
return send(obj)
或者,仅在导致错误时打印:
try:
return send(obj)
except:
print '***', repr(obj)
raise
答案 1 :(得分:0)
您看到的错误可能是由于将错误类型的函数传递给multiprocessing.Pool方法引起的。传递的函数必须可以从其父模块直接导入。例如,它不能是类的方法。