在使用多处理模块的Python中,如何确定哪个对象导致了PicklingError?

时间:2011-10-12 20:57:58

标签: python multiprocessing

我有一个复杂的Python程序。我正在尝试使用多进程池来并行化它。我收到错误消息

PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

追溯显示了政治家return send(obj)

我的假设是它导致问题的“obj”,我需要让它成为可挑剔的。

如何确定哪个对象是问题的原因?该计划很复杂,只是猜测可能需要很长时间。

2 个答案:

答案 0 :(得分:0)

为什么不在return send(obj)之前添加一些日志记录?至少,这可能会有所帮助:

print repr(obj)
return send(obj)

或者,仅在导致错误时打印:

try:
   return send(obj)
except:
   print '***', repr(obj)
   raise

答案 1 :(得分:0)

您看到的错误可能是由于将错误类型的函数传递给multiprocessing.Pool方法引起的。传递的函数必须可以从其父模块直接导入。例如,它不能是类的方法。