Код: Выделить всё
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, ...):
...
Ниже приведен пример структуры моего проекта и примеры кода. :
Код: Выделить всё
my_project/
| app.py
| celery_tasks/
| | moduleA/
| | | __init__.py
| | | tasks.py
| | moduleB/
| | | __init.py
| | | tasks.py
Код: Выделить всё
app.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, ...):
code> и ссылаюсь на них, например app.autodiscover_tasks(['moduleA', 'moduleB']), но выдает те же ошибки, что и в случае отсутствия модуля с именем 'moduleA'.
Кажется это именно то, что описано в документации, но иногда оно может быть немного кратким, и я уверен, что упускаю что-то простое.
Может кто-нибудь указать мне правильное направление (без заставляешь меня чувствовать себя полным идиотом)? =)
Окружающая среда
- Python 3.12 (контейнер Alpine Linux)
- Сельдерей 5.4.0
Подробнее здесь: https://stackoverflow.com/questions/793 ... sk-modules