当我尝试用芹菜运行我的任务时,Pymongo集合对象失败。我想它无法序列化它。我该怎么办?顺便说一句,我尝试了泡菜,但它并没有帮助我。
PS:我不想将全局数据库导入到此模块。
'收集'对象不可调用。如果你想打电话给' 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']
答案 0 :(得分:0)
您是否在Windows计算机上运行此代码?由于Windows上不存在“fork”,因此可能存在潜在的fork问题,因此该对象可能无法选择而导致错误。
答案 1 :(得分:0)
您不应序列化收集对象。而是存储集合 name 并从任务中获取集合对象。
集合对象要求关联的已建立MongoClient对象图可用。没有MongoClient,即使您设法以某种方式反序列化集合对象,也无法使用。