带有 Redis 的 Celery 正在运行,但任务未在 FastAPI 中执行
命令 - redis-服务器 -
命令 - celery -A core.celery_app_work worker --loglevel=info -P eventlet -
芹菜花产量
我想使用 celery 在 fastapi 中执行我的任务
celery_app_work.py
from celery import Celery
from celery.schedules import crontab
celery_app = Celery(__name__,
broker='redis://localhost:6379',
backend='redis://localhost:6379/0')
celery_app.conf.task_routes = {'backend.core.worker_task.*':'example-queue'}
worker_task.py
from .celery_app_work import celery_app
data = {'task':'celery'}
@celery_app.task(name="create_task")
def test_celery(data: str):
print('inside celery')
for i in range(10):
return data
structure -
|--backend
|
|--core
| |---celery_app_work.py
| |---worker_task.py
|
| ---main.py
根据文档,格式应该是app.conf.task_queues
celery_app.conf.task_routes = {'backend.core.worker_task.*': {'queue': 'example-queue'}}
此外,您可能需要向 Celery 指定队列
example-queue
应该存在:
from kombu import Exchange, Queue
exchange = Exchange('default', type='direct')
app.conf.task_queues = (
Queue('example-queue', exchange, routing_key='default'),
)
看起来就像在 GitHub 上打开的案例: https://github.com/celery/celery/issues/3759#issuecomment-311763355
您必须将
-P solo
添加到您的工作进程启动命令中。
我知道这个问题太老了,但当你搜索“celery redis收到但未执行”时,这是谷歌上的第一个答案,我认为这会对任何搜索者有所帮助。