我有一个启动工作程序的包装器脚本,但我不了解如何限制并发数量。我试着阅读芹菜代码,但对我而言,很难看出他们是如何做到的。
我的代码:
from celery.bin import worker as w
my_worker = w.worker(app=app )
options = {
'loglevel': loglevel,
'queues': [service,],
'hostname': hostname,
}
my_worker.run(**options)
我真的不知道如何为此添加并发性。
答案 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>