Celery+Gevent池在执行1000+个任务后挂起



我们有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

相关内容

  • 没有找到相关文章

最新更新