Django celery 多个具有特定并发的工人

Posted

技术标签:

【中文标题】Django celery 多个具有特定并发的工人【英文标题】:Django celery multiple workers with specific concurrencies 【发布时间】:2015-06-23 03:51:40 【问题描述】:

我必须从数据库(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

文件settings.py中我的celery设置

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”

任何建议

提前致谢

【问题讨论】:

【参考方案1】:

当你启动一个 celery worker 时它就会启动

    消费者进程和 一个工作池

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

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

【讨论】:

感谢您的解释,但我为一名工作人员指定了 1 的并发性,然后我启动了任务,几分钟后我再次启动相同的任务,我在我的数据库中看到了正在运行的任务同时(任务调用存储过程)

以上是关于Django celery 多个具有特定并发的工人的主要内容,如果未能解决你的问题,请参考以下文章

Celery:如何用不同的工人区分不同的环境?

Celery / Django - 如何以编程方式查看工人的状态

Heroku/Celery:一名工人同时执行任务?

Django 1.6 + RabbitMQ 3.2.3 + Celery 3.1.9 - 为啥我的芹菜工人死于:WorkerLostError:工人过早退出:信号11(SIGSEGV)

Django Celery:显示零任务/工人的管理界面

celery django 守护进程上的多个工作人员和多个队列