Статус сельдерея застрял в статусе ожидания

Я нашел пример запуска сельдерея с mongodb в качестве бэкэнд-результата здесь original пример кода. В его примере у него есть CELERYBEAT_SCHEDULE с некоторыми параметрами для запуска каждую минуту, в моем случае я просто закомментировал этот код. В моем случае я просто хочу запустить задачу, как только она будет получена. Из рабочего журнала я даже не вижу, что задача получена, а вывод для result.status - ОЖИДАНИЕ. Почему это остается в статусе ожидания и не выполняет задачу. Это простая задача добавления, поэтому я не могу представить, что это займет много времени.

Еще одна вещь: у меня есть виртуальная среда, поэтому мне сказали, что я должен запускать сельдерей как таковой "multi start worker celery --loglevel=info"

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

файл celeryconfig.py

# from celery.schedules import crontab

CELERY_RESULT_BACKEND = "mongodb"
CELERY_MONGODB_BACKEND_SETTINGS = {
    "host": "127.0.0.1",
    "port": 27017,
    "database": "jobs", 
    "taskmeta_collection": "stock_taskmeta_collection",
}

# this was part of the original code but i commented out in hopes 
# it would run the task right away and not delay.
#
#used to schedule tasks periodically and passing optional arguments 
#Can be very useful. Celery does not seem to support scheduled task but only periodic
# CELERYBEAT_SCHEDULE = {
#     'every-minute': {
#         'task': 'tasks.add',
#         'schedule': crontab(minute='*/1'),
#         'args': (1,2),
#     },
# }

файл tasks.py

from celery import Celery
import time 

#Specify mongodb host and datababse to connect to
BROKER_URL = 'mongodb://localhost:27017/jobs'

celery = Celery('EOD_TASKS',broker=BROKER_URL)

#Loads settings for Backend to store results of jobs 
celery.config_from_object('celeryconfig')

@celery.task
def add(x, y):
    time.sleep(5)
    return x + y



# starting celery
celery multi start worker --loglevel=info
celery multi v4.1.0 (latentcall)
> Starting nodes...
    > worker@lnx-v2: OK

работающая задача сельдерея

lnx-v2:171> python
Python 3.4.1 (default, Nov 12 2014, 13:34:48) 
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tasks import add
>>> result = add.delay(1,1)
>>> result
<AsyncResult: 8e6ee263-d8a4-4b17-8d7a-9873b6c98473>
>>> result.status
'PENDING'

рабочий журнал

lnx-v2:208> tail -f worker.log
[2017-10-26 13:41:15,658: INFO/MainProcess] mingle: all alone
[2017-10-26 13:41:15,683: INFO/MainProcess] worker@lnx-v2 ready.
[2017-10-26 13:45:50,465: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2017-10-26 13:45:50,487: INFO/MainProcess] mingle: searching for neighbors
[2017-10-26 13:45:51,522: INFO/MainProcess] mingle: all alone
[2017-10-26 13:45:51,540: INFO/MainProcess] worker@lnx-v2 ready.
[2017-10-26 13:47:13,169: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2017-10-26 13:47:13,191: INFO/MainProcess] mingle: searching for neighbors
[2017-10-26 13:47:14,228: INFO/MainProcess] mingle: all alone
[2017-10-26 13:47:14,254: INFO/MainProcess] worker@lnx-v2 ready.


# Celery process
lnx-v2:209> ps -ef | grep celery
15096     1  0 13:47 ?        00:00:00 [celeryd: worker@lnx-v2:MainProcess] -active- (worker --loglevel=info --logfile=worker%I.log --pidfile=worker.pid --hostname=worker@lnx-v2)
15157 15096  0 13:47 ?        00:00:00 [celeryd: worker@lnx-v2:ForkPoolWorker-1]

person Max Powers    schedule 26.10.2017    source источник
comment
Вы решили это?   -  person Gustavo Alejandro Castellanos    schedule 13.11.2020


Ответы (1)


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

celery.tasks.keys()

Я думаю, что декоратор нужно закрыть скобками

@celery.task()
def add(x, y):
    time.sleep(5)
    return x + y
person daemon24    schedule 30.10.2017