【问题标题】:Celery. Decrease number of processes芹菜。减少进程数
【发布时间】:2012-08-26 04:08:19
【问题描述】:

有什么办法可以限制celery 中的工人数量吗?我有小型服务器,芹菜总是在 1 个核心处理器上创建 10 个进程。我想将此数字限制为 3 个进程。

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    celery worker --concurrency 选项允许指定处理队列的子进程数。

    【讨论】:

    • CELERYD_CONCURENCY = 1 不工作 - 仍然产生 10 个进程。并且 --concurrency=1 具有相同的效果。
    • 你有没有试过在启动之前杀死所有的python进程?可能它们是旧的或不相关的过程。
    • --autoscale=1,1 没有帮助.. 很奇怪。
    【解决方案2】:

    我尝试在我的 settings.py 文件中将并发设置为 1,将 max_tasks_per_child 设置为 1,并同时运行 3 个任务。它只是将 1 个进程作为用户生成,另外 2 个进程作为 celery。它应该只运行 1 个进程,然后等待它完成,然后再运行另一个。

    我正在使用 django celery。

    编辑 {

    我通过在 settings.py 文件中写入 CELERYD_CONCURRENCY = 1 来分配并发性。但是当我使用“tail -f /var/log/celery/w1.log”查看 celery 日志文件时,我看到分配给并发的值为 8。这告诉我 setting.py 不会改变并发性。 为了解决这个问题,我在“/etc/default/celeryd”文件中添加了以下几行。

    # Extra arguments to celeryd
    CELERYD_OPTS="--concurrency=1"
    

    现在队列中的第二个任务等待第一个任务完成。

    }

    【讨论】:

    • 我同意 3 个进程,但对我来说它总是产生 10 个。
    • 我只尝试了三个进程。虽然我不知道极限。主要的是,如果并发为 1,为什么后续任务还要运行。他们应该处于等待状态。
    • 哇!编辑/etc/default/celeryd 帮助了我!非常感谢! =)
    【解决方案3】:

    我的 celeryd-config 文件中有这个

    CELERYD_NODES=2
    

    导致

    $ ps -ef | grep "celery" | grep -v "grep"
    www-data  1783     1  0 17:50 ?        00:00:46 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery1.xxx-31-39-06-74-75 --logfile=/var/log/celery/1.log --pidfile=/var/run/celery/1.pid 
    www-data  1791  1783  0 17:50 ?        00:00:01 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery1.xxx-31-39-06-74-75 --logfile=/var/log/celery/1.log --pidfile=/var/run/celery/1.pid
    www-data  1802     1  0 17:50 ?        00:00:52 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery2.xxx-31-39-06-74-75 --logfile=/var/log/celery/2.log --pidfile=/var/run/celery/2.pid 
    www-data  1858  1802  0 17:50 ?        00:00:01 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery2.xxx-31-39-06-74-75 --logfile=/var/log/celery/2.log --pidfile=/var/run/celery/2.pid
    

    有四个进程,不是两个,而是两个工人。看起来每个工作线程都有两个进程。所以大概如果你将 CELERYD_NODES 设置为 3,你会得到 3 个工人,但有 6 个进程。

    【讨论】:

    • 我忽略了这个选项。 CELERYD_NODES = 1 导致 10 个进程。 CELERYD_NODES = 2 产生 10 个进程。
    【解决方案4】:

    您应该在 celery 选项参数中尝试 --autoscale=3。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2015-06-01
      • 2019-12-07
      • 1970-01-01
      • 2016-03-10
      相关资源
      最近更新 更多