我有两个任务。 任务"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'