объект коллекции pymongo, сериализующий метод __getnewargs__

Объект коллекции 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']

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)


Вы не должны сериализовать объекты коллекции. Вместо этого сохраните коллекцию name и получите объект коллекции из задачи.

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

person D. SM    schedule 26.11.2020