celery 正在运行,但没有执行任何任务

问题描述 投票:0回答:2

带有 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
redis celery fastapi celery-task
2个回答
0
投票

根据文档,格式应该是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'),
)

0
投票

看起来就像在 GitHub 上打开的案例: https://github.com/celery/celery/issues/3759#issuecomment-311763355

您必须将

-P solo
添加到您的工作进程启动命令中。

我知道这个问题太老了,但当你搜索“celery redis收到但未执行”时,这是谷歌上的第一个答案,我认为这会对任何搜索者有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.