我终于有了一些空闲时间,想将 Celery 添加到我在 Heroku 上的 Python/Flask 项目中。然而,几乎所有 Heroku 文档中提到的 Celery 都消失了。“Django 入门”中曾经有一篇教程的文章,但现在没有了。
我自己“只是做”会起作用吗?在 Heroku 上用作后端的好的 AMQP 插件是什么?
他们似乎已经更改了文档。不确定不再支持 celery,因为它只是一个 python 包,你可以安装它。
这是有关如何开始使用 Django的文档(没有我上次观看时提到 celery 的部分)。他们现在似乎使用 RQ 来做 celery 之前所做的事情:Python 中的后台任务与 RQ。你可能仍然会在这里和这里找到一些关于芹菜的东西,但这就是我发现的全部。
一般来说,我怀疑芹菜是否被简单地去除了。它会影响所有其他已经用 Celery 设置的应用程序。我认为您仍然可以使其工作,并且可能会从 Heroku 文档中找到一些文章。
我认为 Celery 作为 Heroku 的后台任务存在问题。我们尝试创建这样的任务,它们在运行大约 20 分钟后占用了所有内存,即使在 Redis 或 RabbitMQ 上使用 DEBUG=False。更糟糕的是,内存永远不会被释放:每次我们必须重新启动 worker。相同的代码可以在裸 Linux 或带有 Foreman 的 Mac 上完美运行。它发生在非常简单的任务中,例如循环读取文本文件,写入 Django 模型。
尽管我花了很长时间才弄清楚如何完成这项工作,但它确实非常简单。在您的 procfile 中,添加一个 celery 进程。它看起来像这样:
web: newrelic-admin run-program gunicorn -w 4 myapp.wsgi
celery: python manage.py celeryd -c 3 --beat
然后,只需确保将 celery dyno 缩放到至少 1:
heroku ps:scale celery=1
就这样。
我们完全支持 Heroku 上的 celery。您可以在我命名您的工作进程并扩展它们时运行工作人员,并运行任何进程。至于使用什么作为后端,我们有各种各样的附加供应商可以通过 Rabbit、Redis 或其他方式支持这一点。
您可以在https://devcenter.heroku.com/articles/celery-heroku在 devcenter 中找到完整指南。