python - Django celery 具有特定并发的多个工作人员

标签 python django celery django-celery celery-task

我必须从数据库(oracle)调用一些存储过程。我使用celery和redis以异步方式调用这个SP。

任务.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”有 4 个进程。

我不知道我是否错过了什么,或者我执行 celery 的突击队是否错误。 但对于任务“CONCI”,我一次只需要一项任务

任何建议

提前致谢

最佳答案

当你启动 celery 工作程序时,它就会启动

  1. 消费者进程和
  2. 工作人员池

所以,如果你启动一个并发数为1的worker,它将有2个进程。对于并发数为 3 的 Worker,它有 4 个进程。

Celery 异步处理任务。它将立即消耗给定的任务,但一次执行 1 个。

关于python - Django celery 具有特定并发的多个工作人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29679822/

相关文章:

python - django-celery 或 python 的奇怪错误

python - 如何阻止我的 Pandas 数据表在打印时被截断?

python - 带有动态前缀的 Django URL

Django CheckboxSelectMultiple 小部件将 --------- 值添加到查询集

docker - docker celery 和代码在不同的容器中

python - 反转一对一映射字典

python - 如何使用子图制作单个图例? _get_legend_handles_labels 不起作用

python - mixins 应该使用父属性吗?

python - 请求库 : missing SSL handshake certificates file after cx_Freeze

python - 如何在生产中将 celery 作为守护进程运行?