Heroku是否不再支持Celery?

13
我终于有了一些空闲时间,想在Heroku上为我的Python/Flask项目添加Celery。然而,Heroku文档中几乎所有关于Celery的提及都已经消失了。以前有一篇关于“入门Django”的教程文章,但现在已经不存在了。
自己尝试是否可行?在Heroku上使用什么好的AMQP插件作为后端?
5个回答

56

我是Heroku的Python所有者。

Celery仍然得到全面支持。 Django指南底部的文档已删除,因为它与最新版Celery(v3.0)不符,并且在我看来相当不完整。

我目前正在撰写一篇新的开发中心文章,深入介绍如何充分利用Celery。 它应该很快发布。

至于队列插件 - 我是CloudAMPQ的铁杆拥护者。


1
期待看到这个 Kenneth! - Erik
27
你一定是在写一篇非常非常长的文章,因为你从三月份就开始了。 - shredding
那篇文章怎么样? - stormlifter
2
有可能 Kenneth 已经去世,而这篇文章也随之被埋没了 o_O - antimatter
1
这是新的 Dev Center celery 文章吗?https://devcenter.heroku.com/articles/cloudamqp#celery - danodonovan
显示剩余2条评论

3

我认为在Heroku上使用Celery作为后台任务存在问题。我们尝试创建这些任务,但即使在Redis或RabbitMQ上DEBUG=False的情况下运行约20分钟后,它们会占用所有内存。更糟糕的是,内存永远不会被释放:每次都必须重新启动工作进程。 相同的代码在裸露的Linux环境或Mac上使用Foreman完美地运行。 即使是非常简单的任务,比如在循环中读取文本文件并写入到Django模型中也会出现这种情况。


1
这是我在2019年的经验。 - zerohedge

3
他们似乎已经更改了文档。不确定Celery是否不再受支持,因为它只是一个Python包,您可以直接安装它。
这里是关于Django入门指南的文档(去掉了上次提到celery的部分)。他们现在似乎使用RQ来完成以前Celery所做的事情:使用RQ进行Python后台任务。您可能仍然会在这里这里找到有关Celery的一些信息,但那就是我找到的全部内容。
总的来说,我怀疑Celery是否被简单地删除了。这将影响所有其他已经设置了Celery的应用程序。我认为您仍然可以让它工作,并且可能会在Heroku文档之外找到一些文章。

我找到了相同的参考资料。其他剩余的Heroku文档中关于Celery的引用并不是很有帮助,实际上几乎不存在。当然,Celery只是一个包,我可以自己安装,但他们删除了文档,将另一个Python文档更改为仅提到rq,并删除了一个插件(我认为曾经有一个插件)。这让我觉得他们发现了一个问题,导致它无法工作,而不是自愿删除它。我搜索过了,但找不到外部教程。我会再搜索一些。 - Nitzan Shaked
他们用celery的例子很糟糕,其中一个问题是它使用了数据库代理,所以如果有人遇到问题也不奇怪(因为使用数据库并不推荐)。 - asksol
为什么不建议使用Celery中的数据库? - Nitzan Shaked
不建议使用数据库作为代理(结果可以)。 数据库后端与多个工作实例配合效果不佳,它是为测试和开发环境编写的。 - asksol

2
我们完全支持在Heroku上使用celery。您可以通过为工作进程命名并进行缩放来运行worker,并且可以运行任何进程。关于使用什么作为后端,我们有各种附加提供程序可以通过Rabbit、Redis或其他方式支持此功能。 您可以在devcenter中找到完整的指南:https://devcenter.heroku.com/articles/celery-heroku

2

虽然我花了比我想象中更长的时间才弄清楚如何使它工作,但这实际上非常简单。在您的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

这就是全部内容。


1
嗨,乔希 - 你可以写一篇更详细的博客文章吗?我会支付给你100美元。 - tadasajon
请随时通过站外联系方式与我沟通。谢谢。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接