やっと時間ができたので、Heroku の Python/Flask プロジェクトに Celery を追加したいと思いました。ただし、Heroku のドキュメントから Celery についての言及はほとんどなくなりました。以前は「Django 入門」にチュートリアルの記事がありましたが、なくなりました。
「やるだけ」の自分はうまくいくのか?Heroku のバックエンドとして使用するのに適した AMQP アドオンは何ですか?
Heroku で Python のオーナーをしています。
セロリはまだ完全にサポートされています。私の意見では、Django ガイドの下部にあるドキュメントは、Celery の最新リリース (v3.0) では古く、かなり不完全だったため、削除されました。
私は現在、Celery を最大限に活用する方法を詳しく説明する新しいDev Center の記事に取り組んでいます。すぐに投稿する必要があります。
キュー アドオンについては、私はCloudAMPQの大ファンです。
Heroku のバックグラウンド タスクとしての Celery には問題があると思います。このようなタスクを作成しようとしましたが、Redis または RabbitMQ で DEBUG=False を使用しても、約 20 分間実行するとすべてのメモリが消費されます。さらに悪いことに、ワーカーを再起動する必要があるたびに、メモリが解放されることはありません。同じコードは、裸の Linux または Foreman を使用した Mac 上で問題なく動作します。ループ内のテキスト ファイルの読み取り、Django モデルへの書き込みなど、非常に単純なタスクで発生します。
彼らはドキュメントを変更したようです。セロリは単なるpythonパッケージであり、インストールするだけでよいため、サポートされなくなったかどうかはわかりません。
これは、 Django を使い始める方法に関するドキュメントです(前回見たときにセロリについて言及されていた部分はありません)。彼らは現在 RQ を使用して、セロリが以前に行っていたことを行っているようです: Background Tasks in Python with RQ。セロリに関する情報はまだこことここにあるかもしれませんが、私が見つけたのはこれだけです。
一般的に、セロリが単に取り除かれているとは思えません。これは、Celery で既に何かが設定されている他のすべてのアプリに影響します。まだ機能させることができ、Heroku のドキュメントから離れた記事を見つけることができると思います。
Heroku ではセロリを完全にサポートしています。ワーカー プロセスに名前を付けてスケーリングし、任意のプロセスを実行して、ワーカーを実行できます。バックエンドとして何を使用するかという点では、Rabbit、Redis、またはその他を介してこれをサポートできるさまざまなアドオン プロバイダーがあります。
https://devcenter.heroku.com/articles/celery-herokuの devcenter 内で完全なガイドを見つけることができます。
この作業を行う方法を理解するのに、認めたくないほど時間がかかりましたが、それは本当に簡単です。procfile で、セロリ プロセスを追加します。次のようになります。
web: newrelic-admin run-program gunicorn -w 4 myapp.wsgi
celery: python manage.py celeryd -c 3 --beat
次に、セロリ dyno を少なくとも 1 にスケーリングするようにしてください。
heroku ps:scale celery=1
それで全部です。