您的位置:首页 > 移动开发 > Objective-C

python multiprocessing.Pool - UnpickleableError: Cannot pickle <type 'thread.lock'> objects

2012-08-22 11:35 971 查看
相关代码:

pool = multiprocessing.Pool(processes=pool_size, initializer=start_process)

#process_cralwer = pool.apply_async(dianshang_current.main, args=(max_threads_num, db, i))

process_cralwer = pool.apply_async(dianshang_current.main, args=(max_threads_num, db, seeds))


max_threads_num为进程中的线程个数,db为数据库操作相关的类,i为数字,seeds为db执行select后返回的元组。

修改第3行为第5行,及相关代码之后运行时报错。

错误信息:

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 484, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.6/multiprocessing/pool.py", line 226, in _handle_tasks
put(task)
UnpickleableError: Cannot pickle <type 'thread.lock'> objects


开始以为错误是由于传递的最后一个参数由i改为seeds引起,google后发现元组、列表、字符串类型都是pickleable的。

错误是传递的db类型变为thread.lock造成的,而之前的db没有进行数据库操作故没有连接数据库。

于是,在db进行数据库操作后断开数据库连接后再传入Pool就好了。

参考:

http://stackoverflow.com/questions/7865430/multiprocessing-pool-picklingerror-cant-pickle-type-thread-lock-attribu

原文:/article/6987037.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐