
backend-async-tasks
Use when creating or updating Celery tasks, async job logic, or Beat schedules in the backend.
提供方 lmiguelvargasf|开源
Backend async tasks (Celery)
When to use
- You are adding or changing a Celery task in
backend/src/backend/apps/**/tasks.py. - You need to update the Celery Beat schedule in
backend/src/backend/celery_app.py. - You are adding DB access inside a Celery worker process.
Steps
- Define tasks only in a
tasks.pyfile under the relevant app module. - Decorate tasks with
@app.taskimported frombackend.celery_app. - Return a typed result (
int,None, etc.). Keep task-specific parameters local unless they must be environment-configured. - For DB access:
- Use
asyncio.run()to bridge async work. - Always acquire a session via
get_task_session()frombackend.celery_app.
- Use
- For periodic jobs, update
app.conf.beat_scheduleinbackend/src/backend/celery_app.pyand usecelery.schedules.crontab.
Constraints and guardrails
- Never use the global
alchemy_configengine inside a task; it is not fork-safe for Celery workers. - Always use
get_task_session()to manage DB connections safely across worker processes.
References
backend/src/backend/apps/**/tasks.pybackend/src/backend/celery_app.pybackend/tests/apps/users/test_tasks.py