Django Celery 队列路由不起作用



我有两个任务。 任务"heavy_task"需要并发 1,"lite_task"需要并发 4

@task
def lite_task():
    tabla = Proc_Carga()
    sp = tabla.carga()
    return None
@task()
def heavy_task(idprov,pfecha):
    conci = Buscar_Conci()
    spconc = conci.buscarcon(idprov,pfecha)
    return None

我在 settings.py 文件中定义了路由:

BROKER_URL = 'redis://localhost:6379/0'
CELERY_IMPORTS = ("pc.tasks", )
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_RESULT_BACKEND='djcelery.backends.cache:CacheBackend'
CELERY_ROUTES = {"tasks.heavy_task": {"queue": "heavy"},"tasks.lite_task": {"queue": "lite"}}

我尝试以这种方式执行两个指定并发的工人

celery multi start heavy lite -A provcon  -c:heavy 1 -c:lite 3

当第一次调用任务heavy_task工作正常并且并发工作时,但是在调用任务后lite_task队列重更改的并发。

我试试这个:

celery -A provcon worker -Q heavy -c 1

当我heavy_task执行任务时,路由将不起作用,并且任务不会执行。

但如果使用这个:

celery -A provcon -c 1

一切正常,但我一次只能执行一个任务,我需要能够执行并发为 1 的heavy_task和并发为 3 的lite_task

任何建议

我尝试了不同的设置来使队列工作,最后我做到了。在 tasks.py 文件中,我在任务装饰器中对队列进行了编码

@task(queue = 'heavy')

为了运行工作线程,我使用它:

celery multi start lite_w heavy_w -A provcon -Q:heavy_w heavy -Q:carga_w lite -l info -c:heavy_w 1 -c:lite_w 3 -E

我从 settings.py 文件中删除了路由设置。我的设置是这样的:

BROKER_URL = 'redis://localhost:6379/0'
CELERY_IMPORTS = ("pc.tasks", )
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_RESULT_BACKEND='djcelery.backends.cache:CacheBackend'

相关内容

  • 没有找到相关文章

最新更新