django - 将 gevent(或 eventlet)和 prefork worker 与 Celery 一起使用

标签 django concurrency celery gevent eventlet

在 Celery 文档的并发部分中,它指出:

...mix of both Eventlet and prefork workers, and route tasks according to compatibility or what works best



来源:http://celery.readthedocs.org/en/latest/userguide/concurrency/eventlet.html#concurrency-eventlet

这意味着可以让一个 worker 使用 gevent/eventlet 池实现,而另一个使用 prefork 池。

使用 celery multi 创建多个 worker 时可以指定池实现:
celery -A proj multi start 2 -P gevent -c 1000

这将启动 2 个 gevent 工作人员,但是在使用 celery multi 时,如何在每个工作人员的基础上指定池实现,以便一个 worker 使用 gevent 池,而另一个 worker 使用 prefork?
celery multi文档没有提及有关此特定问题的任何内容,并且源代码( celery.bin.multi )并未真正表明这是可能的(除非我误读/误解了代码)。

最佳答案

因此,目前指定每个 worker Pool 实现的唯一方法是运行独立的 celery worker命令:

$ celery -A proj worker start -P gevent -Q:queue1 -c 500
$ celery -A proj worker start -P prefork -Q:queue2 -c 4
celery multi不支持-P:worker1 gevent, -P:worker2 prefork .这在使用 Celery 中提供的 init.d 脚本时变得困难 docs守护 celeryd。所以你要么修改 init.d 脚本,要么使用类似 Supervisor 的东西。

关于django - 将 gevent(或 eventlet)和 prefork worker 与 Celery 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29152712/

相关文章:

ios - 如何保证OperationQueue中的操作一个接一个完成

python - 如何使用 docker-compose 设置一个容器以允许其整个卷访问另一个容器

PostgreSQL 对正在更新的表进行选择查询

redis - Airflow 是否支持通过 TLS 连接代理 url?

python - 使用 Django 24 小时后软删除

python - 导入错误 : Could not import settings 'health_tweets.settings' No module named health_tweets. 设置

django - Django 模型中的重复字段

django http 直接响应html

django - 我可以使用哪些命令/配置来使用 ecs-cli 部署 django+postgres+nginx?

java - 在这种情况下,同步语句如何工作?