Не удается увидеть выходные сообщения задач, выполненных в комбинации celery-rabbitMQ - PullRequest
2 голосов
/ 28 апреля 2019

Я испытываю комбинации сельдерея и rabbitMQ для планирования асинхронных задач, ниже приведен пример программы, которую я пробовал в Pycharm IDE .... Кажется, все работает, но я не могу увидеть возвращаемое значение из задач.

Я также наблюдаю за консолью управления rabbitMQ, но все еще не могу увидеть возвращаемое значение из задач.

Я не понимаю, где я иду не так, это моя первая попытка сельдерея и RabbitMQ

Я создал файл tasks.py с двумя примерами задач (с назначенными надлежащими декораторами) и возвращал значение для каждой задачи.

Я также запустил сервер RabbitMQ (с помощью команды {rabbitmq-server start}).

Затем я запустил работника сельдерея, использовала команду: {celery -A tasks --loglevel=info}

Теперь, когда я пытаюсь выполнить эти задачи, используя метод delay (), команда ({reverse.delay('andy')}) выполняется, и я получаю, что-то вроде этого, но я не могу увидеть возвращаемое значение.

from celery import  Celery

app = Celery('tasks', broker= 'amqp://localhost//', backend='rpc://')

@app.task
def reverse(string):
    return string[::-1]

@app.task
def add(x, y):
    return x + y

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Ну, я выяснил проблему ... Это швы, последние версии сельдерея не подходят для окон.Чтобы решить эту проблему, я установил пакет 'eventlet', и он позаботился обо всем остальном.

Следует отметить, что нам нужно запустить работника сельдерея с помощью поддержки eventlet, PFB команда:

celery -A <module_name> worker -loglevel=info -P eventlet
0 голосов
/ 28 апреля 2019

Вы можете проверить возвращаемое значение из задачи , используя result свойство .Синтаксис ниже приведен в python3 с подсказкой типа, чтобы вы могли следить за тем, что происходит.

import time
from celery.result import AsyncResult

result: AsyncResult = reverse.delay('andy')
task_id: str = result.id

while not result.ready():
    time.sleep(1)
    result = AsyncResult(task_id)
if result.successful():
   return_value = result.result

nb, приведенный выше пример является наивным, поскольку в производственной среде вы обычно не занятыподожди, как мы здесь.Вместо этого клиент периодически отправляет опросы, проверяя, готов ли статус, и, если нет, возвращает управление какой-то другой части кода (например, пользовательскому интерфейсу со счетчиком).

...