python - 芹菜工人如何在 Heroku 中进行交流
问题描述
我在 Heroku 应用程序中有一些芹菜工人。我的应用正在使用python3.6
and django
,这些是相关的依赖项及其版本:
celery==3.1.26.post2
redis==2.10.3
django-celery==3.2.2
我不知道这对这个问题是否有用,但以防万一。在 Heroku 上,我们正在运行Heroku-18
堆栈。
像往常一样,我们在 a 中声明了我们的工人Procfile
,其内容如下:
web: ... our django app ....
celeryd: python manage.py celery worker -Q celery --loglevel=INFO -O fair
one_type_of_worker: python manage.py celery worker -Q ... --maxtasksperchild=3 --loglevel=INFO -O fair
another_type: python manage.py celery worker -Q ... --maxtasksperchild=3 --loglevel=INFO -O fair
所以,我目前对这个过程的理解如下:
我们的 celery 队列在多个 worker 上运行,每个 worker 在 Heroku 上作为一个 dyno 运行(不是服务器,而是一个“工作进程”之类的东西,因为服务器不是 Heroku 上的概念)。我们还有多个 dyno 运行同一个队列的同一个 celery worker,这导致该队列有多个并行“线程”来同时运行更多任务(可扩展性)。网络工作者、celery 工作者和 celery 队列可以相互通信,因为 celery 管理它们之间的编排。我认为具体是经纪人来承担这一责任。但是例如,这让我们的网络工作者在特定队列上安排一个 celery 任务,并将其路由到正确的队列/工作者,或者在一个队列/工作者中运行的任务可以在不同的队列/工作者上安排任务。
现在我的问题来了,工人沟通了吗?他们是否在 localhost 中使用带有端口的 API 端点?RCP?他们使用经纪人网址吗?魔法?
我问这个是因为我试图在 ECS 中复制这个设置,我需要知道如何为 celery 设置它。
解决方案
在这里您可以了解 celery 在 heroku 中的工作原理:https ://devcenter.heroku.com/articles/celery-heroku
如果没有为 celery 安装 Heroku dyno,就无法在 Heroku 上运行 celery。此外,请确保您在 Django celery 设置中配置了 Redis。
要在 Heroku 上运行 celery,只需将此行添加到您的Procfile
worker: celery -A YOUR-PROJECT_NAME worker -l info -B
注意:上面的 celery 命令将同时运行 celeryworker
和 celerybeat
如果要单独运行,可以使用单独的命令,但建议使用一个命令
推荐阅读
- javascript - overflow-x 滚动属性适用于桌面,但不适用于手机
- mysql - Docker 中的多个 MariaDB 数据库
- apache-kafka - 在 kafka broker 中添加压缩会有什么影响
- symfony - 在 Symfony 3 的 SQLFilter 中获取用户
- java - 我只能访问列表中的第一项
- javascript - ionic2- 动态改变离子卡的内容
- java - Button.findViewById 与 Button = findViewById
- perl - 哈希排序哈希的元素限制
- max - 契约匹配规则,最小值和最大值
- amazon-web-services - Beanstalk 环境覆盖 Auto Scaling 组中的启动模板设置?