我终于有了一些空闲时间,想在Heroku上为我的Python/Flask项目添加Celery。然而,Heroku文档中几乎所有关于Celery的提及都已经消失了。以前有一篇关于“入门Django”的教程文章,但现在已经不存在了。
自己尝试是否可行?在Heroku上使用什么好的AMQP插件作为后端?
自己尝试是否可行?在Heroku上使用什么好的AMQP插件作为后端?
我认为在Heroku上使用Celery作为后台任务存在问题。我们尝试创建这些任务,但即使在Redis或RabbitMQ上DEBUG=False的情况下运行约20分钟后,它们会占用所有内存。更糟糕的是,内存永远不会被释放:每次都必须重新启动工作进程。 相同的代码在裸露的Linux环境或Mac上使用Foreman完美地运行。 即使是非常简单的任务,比如在循环中读取文本文件并写入到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
这就是全部内容。