【发布时间】:2014-10-27 04:24:24
【问题描述】:
我在这个code 中遇到了一个可腌制问题(也附在下面)。我已经阅读了相关的帖子[1][2],但我找不到有用的对应。能否请您对此错误的解释或解决方案?
下面是返回错误的部分代码:
pickle.PicklingError: Can't pickle <class '__main__.JobQueueManager'>: it's not found as __main__.JobQueueManager
谢谢!
def make_server_manager(port, authkey):
job_q = Queue.Queue()
result_q = Queue.Queue()
class JobQueueManager(SyncManager):
pass
JobQueueManager.register('get_job_q', callable=lambda: job_q)
JobQueueManager.register('get_result_q', callable=lambda: result_q)
manager = JobQueueManager(address=('', port), authkey=authkey)
manager.start()
print 'Server started at port %s' % port
return manager
PS:Python 2.7.7,Win 7
【问题讨论】:
-
您需要包含完整的回溯,以及引发异常时实际调用的代码。
-
由于 Python 的多处理模块的一些限制,新进程中的所有对象都必须是可腌制的。只有模块级的类和函数可以被腌制。因此,
JobQueueManager必须在顶层定义。
标签: python multiprocessing pickle