我们有8个核心,16GB内存,Linux服务器运行芹菜,它正在运行一个芹菜工作队列myQueue
,并在gevent池下以1000并发运行。
在执行任务约1小时后,工作人员突然冻结,不接受celery beat
的新任务这是我们的芹菜配置
App = Celery('tasks')
class Conf:
BROKER_URL = 'amqp://<user>:<pass>@<host>:<port>/<vhost>'
CELERY_IGNORE_RESULT = True
CELERY_IMPORTS = ("worker_class",)
CELERYBEAT_SCHEDULE = {
'RunTask':{
'task': 'tasks.worker.MyWorker',
'schedule' : timedelta(minutes=5)
}
}
App.config_from_object(Conf)
我们正在像低于一样经营芹菜
celery worker --workdir=tasks/ -A worker -P gevent -c 1000 -Q myQueue --loglevel=INFO
还有人能解释一下我如何使用celery multi
使用gevent池吗
使用celery multi
:指定池类型
celery -A myApp multi start 4 -l INFO -P gevent -c 1000 -Q myQueue
上面的命令启动4个gevent工作程序,每个工作程序的并发级别为1000,所有工作程序都从myQueue消耗。
但这并不是乐趣的终点,因为您甚至可以指定每个工作者的并发性,还可以指定每个工作人员使用的队列。例如:
celery -A myApp multi start 4 -l INFO -P gevent -c:1-3 1000 -c:4 200 -Q:1-2 myQueue1 -Q:3 myQueue2 -Q:4 myQueue3
就像之前我们启动4个gevent工作程序一样,但现在工作程序1到3的并发性为1000,而最后一个工作程序的并发性是200。此外,工作者1和2从myQueue1消费,工作者3从myQueue2消耗,工作者4从1myQueue4中消耗。
注意:celery worker
选项适用于celery multi