Автоматическое обнаружение задач Celery из подпапки модулей задачPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Автоматическое обнаружение задач Celery из подпапки модулей задач

Сообщение Anonymous »

Я уже некоторое время использую Celery (без участия Django), но все мои задачи всегда определялись в одном основном файле Tasks.py, например:

Код: Выделить всё

from celery import Celery

app = Celery(
'tasks',
broker=["amqp://..."],
backend="redis://..."
)
app.config_from_object('celeryconfig')

@app.task(
bind=True,
max_retries=5,
autoretry_for=(
...
)
)
def my_task(self, ...):


...
Со временем проект стал довольно большим, и я пытаюсь разбить эти задачи на различные модули в зависимости от систем, с которыми они взаимодействуют (базы данных, API и т. д.). Я хочу загрузить все эти задачи модуля с помощью функции app.autodiscover_tasks(), но продолжаю сталкиваться с ModuleNotFoundError.

Ниже приведен пример структуры моего проекта и примеры кода. :

Код: Выделить всё

my_project/
|  app.py
|  celery_tasks/
|  |  moduleA/
|  |  |  __init__.py
|  |  |  tasks.py
|  |  moduleB/
|  |  |  __init.py
|  |  |  tasks.py
теперь содержит:

Код: Выделить всё

from celery import Celery

app = Celery(
'tasks',
broker=["amqp://..."],
backend="redis://..."
)
app.config_from_object('celeryconfig')
app.autodiscover_tasks(['.celery_tasks.moduleA', '.celery_tasks.moduleB'])

Код: Выделить всё

celery_tasks/moduleA/__init__.py:
from .tasks import *

Код: Выделить всё

celery_tasks/moduleA/tasks.py:
from celery import Task
from app import app

class ModuleA(Task):
bind = True
max_retries = 5
autoretry_for = ( ... )

@app.task(base=ModuleA)
def my_task(self, ...):

Я пробовал это несколькими способами с разными структурами: например, удалил родительскую папку celery_tasks/ и разместил каждый модуль в корне проекта с помощью app.py
code> и ссылаюсь на них, например app.autodiscover_tasks(['moduleA', 'moduleB']), но выдает те же ошибки, что и в случае отсутствия модуля с именем 'moduleA'.
Кажется это именно то, что описано в документации, но иногда оно может быть немного кратким, и я уверен, что упускаю что-то простое.

Может кто-нибудь указать мне правильное направление (без заставляешь меня чувствовать себя полным идиотом)? =)
Окружающая среда
  • Python 3.12 (контейнер Alpine Linux)
  • Сельдерей 5.4.0


Подробнее здесь: https://stackoverflow.com/questions/793 ... sk-modules
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»