pymongo колекция обект сериализиране __getnewargs__ метод

Обектът за събиране на Pymongo се проваля, когато се опитвам да изпълня задачите си с целина. Предполагам, че не може да го сериализира. Какво трябва да направя? Между другото опитах туршия, но не ми помогна.

PS: Не искам да правя глобален db импорт към този модул.

Обектът „Колекция“ не може да бъде извикан. Ако сте искали да извикате метода „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']

person fatihsucu    schedule 12.12.2014    source източник
comment
Ако искате да проверите какво води до неуспех в възможността за сериализиране на обекти, можете да опитате методи в модула dill.detect. github.com/uqfoundation   -  person Mike McKerns    schedule 23.12.2014
comment
Изпълнявате ли този код на машина с Windows? Възможно е да има основен проблем с разклонението, тъй като „разклонението“ не съществува в Windows, така че обектът може да не може да бъде избран, което причинява грешка.   -  person andrea-f    schedule 29.04.2015


Отговори (1)


Не трябва да сериализирате обекти на колекция. Вместо това съхранявайте име на колекция и получете обект на колекция от задачата.

Обектите за събиране изискват свързаната установена обектна графика на MongoClient, за да бъде използваема. Без MongoClient, дори ако по някакъв начин сте успели да десериализирате обект на колекция, това няма да работи.

person D. SM    schedule 26.11.2020