pymongo集合对象序列化__getnewargs__方法

fat*_*ucu 7 python serialization pickle celery pymongo

当我尝试用芹菜运行我的任务时,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
Run Code Online (Sandbox Code Playgroud)

db.py

from pymongo import MongoClient    
db = MongoClient()['test']['collection']
Run Code Online (Sandbox Code Playgroud)

D. *_* SM 1

您不应该序列化集合对象。相反,存储集合名称并从任务中获取集合对象。

集合对象需要关联的已建立的 MongoClient 对象图才能使用。如果没有 MongoClient,即使您以某种方式设法反序列化集合对象,它也无法工作。