1

我有两个任务。任务“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 的并发执行重任务和以 3 的并发执行 lite_task

任何建议

4

1 回答 1

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'
于 2015-05-04T17:27:26.407 回答