Переопределить результат сериализатора сельдерея - PullRequest
0 голосов
/ 27 мая 2020

Я использую аккорды сельдерея для структурирования параллельной обработки AI большого содержимого страницы документа. Поскольку это функция одноразового использования без подписи publi c, я собираю объекты для распространения и повторной агрегации. Задача обработки отдельной страницы - это успешное чтение аргументов и выполнение необходимой функции. Однако не удается вернуть результаты в очередь для последующей агрегации.

Кто-нибудь знает способ указать result_serializer для одной задачи, вызываемой через Chord?

генерация аккорда ---

callback = processPageResults.subtask(kwargs={'cdd_id' : cdoc.cdd_id,'user_id':user.id},options={'serializer':'pickle'})

res = chord([processPage.s(useBold,
       docPages[i]).set(serializer='pickle') for i in range(0, len(docPages))], callback)()

вызываемая задача --- @shared_task (serializer = 'pickle', result_serializer = 'pickle', bind = True, max_retries = 20) def processPage (self, * args): useBold = args [0] page = args [1] page.processWords (useBold) вернуть страницу

ошибка ---

kombu.exceptions.EncodeError: Object of type DocumentPage is not JSON serializable

1 Ответ

1 голос
/ 17 августа 2020

В идеале вы можете установить result_serializer в сигнатуре, которая работает для обычной задачи.

В случае с аккордом это не работает для меня. Но с другой стороны, вы можете обновить глобальную конфигурацию сельдерея , и она будет работать.

Я пытаюсь сообщить, что это ошибка. Давайте посмотрим.

celery = Celery("app_name", backend=result_backend, broker=broker_url)

celery.conf.update(
    result_serializer='pickle',        
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...