从脚本和并发运行芹菜工人

时间:2017-06-27 07:26:45

标签: python concurrency celery

我有一个启动工作程序的包装器脚本,但我不了解如何限制并发数量。我试着阅读芹菜代码,但对我而言,很难看出他们是如何做到的。

我的代码:

from celery.bin import worker as w

my_worker = w.worker(app=app )
options = {
  'loglevel': loglevel,
  'queues': [service,],
  'hostname': hostname,
  }
my_worker.run(**options)

我真的不知道如何为此添加并发性。

1 个答案:

答案 0 :(得分:1)

以下是我的代码,只需使用cmd celery

def start(self,datas):
    queue = datas['queue']
    # check if exists with app.control.inspect().active()
    all_workers = self.active(datas).keys()
    if all_workers:
        return None
    #return os.getcwd()
    a="celery multi start %s_worker -A celeryserver  -Q '%s' --concurrency=1 -l  DEBUG" % (queue, queue)
    sys.argv = a.split()
    from celery.bin.celery import main
    try:
        main()
    except SystemExit as exit:
        return exit.code 

为您的代码添加'concurrency': 1到您的options它应该有效,未经过测试),但我建议您使用main sys.argv 1}}就像我一样  因为它可以使用sys.argv自动将*args, **options解析为Command.handle_argv并调用__call__调用self.run()(就像您一样,但更兼容且更容易)。< / p>