pymongo集合对象序列化__getnewargs__方法

时间:2014-12-12 17:43:14

标签: python serialization celery pymongo pickle

当我尝试用芹菜运行我的任务时,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']

2 个答案:

答案 0 :(得分:0)

您是否在Windows计算机上运行此代码?由于Windows上不存在“fork”,因此可能存在潜在的fork问题,因此该对象可能无法选择而导致错误。

答案 1 :(得分:0)

您不应序列化收集对象。而是存储集合 name 并从任务中获取集合对象。

集合对象要求关联的已建立MongoClient对象图可用。没有MongoClient,即使您设法以某种方式反序列化集合对象,也无法使用。