Django celery 多个具有特定并发性的工人
Django celery multiple workers with specific concurrencies
我必须从数据库 (oracle) 调用一些存储过程。我用celery和redis异步调用这个SP。
tasks.py
@task
def carga_ftp():
tabla = Proc_Carga()
sp = tabla.carga()
return None
@task
def conci(idprov,pfecha):
conci = Buscar_Conci()
spconc = conci.buscarcon(idprov,pfecha)
return None
我需要为每个任务指定不同的并发。对于任务 CONCI,我需要并发数为 1,对于任务 CARGA_FTP,并发数为 3 或更多
celery multi start -A provcon conc carga -c:conc 1 -c:carga 3
文件中我的celery设置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.conci": {"queue": "conc"}, "tasks.carga_ftp": {"queue": "carga"}}
但是工人"CONC"同时承担了1个以上的任务,工人"CARGA"也同时承担了3个以上的任务
当我看到进程时
ps aux | grep 'celery'
我看到工人 "CONC" 有两个进程,工人 "CARGA" 有四个进程。
不知道是我漏掉了什么,还是我执行celery的突击队有误。
但是我一次只需要一个任务来完成任务 "CONCI"
任何建议
提前致谢
当你启动 celery worker 时,它会启动
- 消费者进程和
- 一个工作池
因此,如果您启动一个并发为 1 的 worker,它将有 2 个进程。对于并发为 3 的 worker,它有 4 个进程。
Celery 异步处理任务。它会立即消耗给定的任务,但一次执行 1 个。
我必须从数据库 (oracle) 调用一些存储过程。我用celery和redis异步调用这个SP。
tasks.py
@task
def carga_ftp():
tabla = Proc_Carga()
sp = tabla.carga()
return None
@task
def conci(idprov,pfecha):
conci = Buscar_Conci()
spconc = conci.buscarcon(idprov,pfecha)
return None
我需要为每个任务指定不同的并发。对于任务 CONCI,我需要并发数为 1,对于任务 CARGA_FTP,并发数为 3 或更多
celery multi start -A provcon conc carga -c:conc 1 -c:carga 3
文件中我的celery设置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.conci": {"queue": "conc"}, "tasks.carga_ftp": {"queue": "carga"}}
但是工人"CONC"同时承担了1个以上的任务,工人"CARGA"也同时承担了3个以上的任务
当我看到进程时
ps aux | grep 'celery'
我看到工人 "CONC" 有两个进程,工人 "CARGA" 有四个进程。
不知道是我漏掉了什么,还是我执行celery的突击队有误。 但是我一次只需要一个任务来完成任务 "CONCI"
任何建议
提前致谢
当你启动 celery worker 时,它会启动
- 消费者进程和
- 一个工作池
因此,如果您启动一个并发为 1 的 worker,它将有 2 个进程。对于并发为 3 的 worker,它有 4 个进程。
Celery 异步处理任务。它会立即消耗给定的任务,但一次执行 1 个。