Задачи Celery + Redis в разных файлах - PullRequest
0 голосов
/ 15 мая 2018

Когда я запускаю Celery из командной строки, я вижу только задачи, которые находятся в том же файле, что и объект Celery, но не те, что в других файлах.

Структура проекта следующая:

celery_test
    celery_tasks
        __init__.py
        celery_app.py
        async
            __init__.py
            tasks.py
        marker
            __init__.py
            tasks.py

Содержимое файлов выглядит следующим образом

celery_app.py

from __future__ import absolute_import
from celery import Celery

celery_application = Celery('celery_test', backend='redis://localhost', broker='redis://localhost')

@celery_application.task
def test_celery():
    print 4

И любой из файлов tasks.py имеет что-то вроде

async/tasks.py

from __future__ import absolute_import
import time

from celery_tasks.celery_app import celery_application


@celery_application.task
def async_test():
    print 'Start async_test'
    time.sleep(3)
    print 'Finish async_test'

Когда я запускаю Celeryследующим образом

celery --app=celery_tasks.celery_app:celery_application worker -l debug

Я получаю следующее

 -------------- celery@LAPTOP-HCR4G00Q v3.1.25 (Cipater)
---- **** -----
--- * ***  * -- Windows-10-10.0.16299
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         celery_test:0x6ff3f28
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost/
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ----
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery


[tasks]
  . celery.backend_cleanup
  . celery.chain
  . celery.chord
  . celery.chord_unlock
  . celery.chunks
  . celery.group
  . celery.map
  . celery.starmap
  . celery_tasks.celery_app.test_celery

, это просто задача, которая находится в том же файле, что и приложение.

Любые предложения о том, какреши это?Мне действительно нужно разделить задачи по темам, потому что их много, чтобы они были в одном файле.

1 Ответ

0 голосов
/ 15 мая 2018

Я потратил много времени на написание вопроса и просто решил его, поэтому я разделяю решение, потому что информации о нем немного (или, по крайней мере, я его не нашел).

После определенияОбъект Celery, я пытался автоматически обнаружить задачи, но он не работал.Моей последней попыткой было изменить имя приложений и принудительное обнаружение следующим образом:

celery_application.autodiscover_tasks(['celery_tasks.async', 'celery_tasks.marker'], force=True)

И с celery_test/ запустить:

celery --app=celery_tasks.celery_app:celery_application worker -l info

Это решило мою проблему.Я надеюсь, что это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...