django芹菜排队路线不起作用

时间:2015-04-30 16:02:09

标签: celery django-celery celery-task djcelery

我有两项任务。任务" 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"}}

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

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

任何建议

1 个答案:

答案 0 :(得分:0)

我尝试不同的设置让队列工作,最后我做到了。 在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'