【发布时间】:2015-02-11 11:47:47
【问题描述】:
当我尝试使用 celery 运行任务时,Pymongo 集合对象失败。我猜它无法序列化它。我该怎么办?顺便说一句,我试过泡菜,但它对我没有帮助。
PS:我不想让全局数据库导入到这个模块。
'Collection' 对象不可调用。如果您打算调用 'getnewargs' 方法....
示例代码如下。 module.py
from celery.contrib.methods import task_method
class Some_Class(object):
"""docstring for Some_Class"""
def __init__(self, db):
super(Some_Class, self).__init__()
self.db = db # This object causes 'Collection' object is not callable
#db is a pymongo collection object from db.py
@app.task(filter=task_method) # Celery task
def add(self):
"""
db.insert({'some_key':'some_value'})
"""
return 3
db.py
from pymongo import MongoClient
db = MongoClient()['test']['collection']
【问题讨论】:
-
如果您正在寻找导致对象可序列化失败的原因,您可以尝试
dill.detect模块中的方法。 github.com/uqfoundation -
您是否在 Windows 机器上运行此代码?由于 Windows 上不存在“fork”,因此可能存在潜在的 fork 问题,因此该对象可能不可拾取,从而导致错误。
标签: python serialization celery pymongo pickle