Celery 5.2(Dawn Chorus)の新機能—Pythonドキュメント
セロリ5.2(ドーンコーラス)の新機能
- 著者
- Omer Katz(
omer.drow at gmail.com
)
変更履歴
新しいドキュメントではメジャーバージョンの変更について説明しています。バグ修正リリース(0.0.x)の変更を一覧表示する変更履歴もありますが、古いシリーズは履歴セクションにアーカイブされています。 。
Celeryは、Pythonで分散システムを維持するために必要なツールを操作に提供しながら、大量のメッセージを処理するためのシンプルで柔軟性があり、信頼性の高い分散プログラミングフレームワークです。
これは、リアルタイム処理に重点を置いたタスクキューであり、タスクのスケジューリングもサポートしています。
Celeryには、ユーザーと寄稿者の大規模で多様なコミュニティがあります。IRCまたはメーリングリストでに参加する必要があります。
ノート
Freenodeの問題に続いて、ほとんどのプロジェクトと同様に、IRCチャネルをLiberaChatに移行しました。 Gitter を使用して参加することもできます。
私たちは時々質問に答えるためにそこにいます。 ぜひご参加ください。
セロリの詳細については、はじめにをお読みください。
このバージョンは以前のバージョンとほとんど下位互換性がありますが、このリリースは新しいメジャーバージョンであるため、次のセクションを読むことが重要です。
このバージョンは、CPython 3.7&3.8&3.9で公式にサポートされており、PyPy3でもサポートされています。
目次
このバージョンにアップグレードする前に、必ず重要な注意事項をお読みください。
序文
ノート
このリリースには、2つの(重大な可能性がある)メモリリークの修正が含まれています。 できるだけ早くこのリリースにアップグレードすることをお勧めします。
5.2.0リリースは、Celeryの新しいマイナーリリースです。
5.xシリーズのリリースは、 Jon Hopkins の曲にちなんでコードネームが付けられています。 このリリースのコードネームは Dawn Chorus です。
今後は、Python3.7以降のみをサポートします。 2023年6月のEOLになるまで、Python3.7との互換性を維持します。
— Omer Katz
長期サポートポリシー
Celery 4.xをサポートするリソースがないため、サポートしなくなりました。 あなたが私たちを助けたいのであれば、すべての貢献を歓迎します。
Celery 5.x はLTSリリースではありません。 Celery6.xのリリースまでサポートします。
現在、ロングタームサポートポリシーを定義中です。 更新については、次の「新着情報」ドキュメントをご覧ください。
貢献者の壁
ノート
この壁はgitの履歴から自動的に生成されたため、残念ながら、メーリングリストの質問への回答など、より重要なことを支援する人は含まれていません。
Celery4.xからのアップグレード
ステップ1:コマンドライン呼び出しを調整する
Celery 5.0では、完全な下位互換性がない新しいCLI実装が導入されています。
グローバルオプションは、サブコマンドの後に配置できなくなりました。 代わりに、次のように celery コマンドのオプションとして配置する必要があります。
celery --app path.to.app worker
デーモン化ガイドを使用してCeleryを本番環境にデプロイしていた場合は、更新のために再度アクセスする必要があります。
手順2:新しい設定名で構成を更新します
Celery 4.0に移行したときに構成をまだ更新していない場合は、今すぐ更新してください。
これらの非推奨設定の使用について大声で警告しなかったため、非推奨期間を6.0まで延長することを選択しました。
手順については、移行ガイドを参照してください。
ステップ3:このドキュメントの重要な注意事項を読む
次のセクションに記載されている重要なアップグレードノートの影響を受けていないことを確認してください。
CLIでの重大な変更が影響を与えないことを確認する必要があります。 詳細については、新しいコマンドラインインターフェイスを参照してください。
ステップ4:コードをPython3に移行する
Celery5.xはPython3のみをサポートします。 したがって、コードがPython3と互換性があることを確認する必要があります。
コードをPython3に移植していない場合は、アップグレードする前に移植する必要があります。
2to3 や pyupgrade などのツールを使用して、この作業を支援できます。
移行が完了したら、Celery 4でテストスイートを実行して、何も壊れていないことを確認します。
ステップ5:Celery5.2にアップグレードする
この時点で、ワーカーとクライアントを新しいバージョンにアップグレードできます。
重要な注意事項
サポートされているPythonバージョン
サポートされているPythonのバージョンは次のとおりです。
- CPython 3.7
- CPython 3.8
- CPython 3.9
- PyPy3.7 7.3(
pypy3
)
実験的サポート
Celeryは、これらのPythonバージョンがまだ本番環境に対応していないため、暫定的にサポートしています。
- CPython 3.10(現在RC2)
メモリリークの修正
このバージョンでは、2つの重大なメモリリークが修正されています。
celery.result.ResultSet
は、それ自体への循環参照を保持しなくなりました。- マスタープロセスがブローカーから切断されたときに、プリフォークプールがメッセージをキャッシュに永久に保持しなくなりました。
celery.result.ResultSet
を使用すると、最初のメモリリークが発生します。 各インスタンスは、promiseの呼び出し可能オブジェクトへの引数としてそのインスタンスを提供するpromiseを保持していました。 これにより循環参照が発生し、GCがインスタンスを削除できなかったため、ResultSetインスタンスがメモリに永久に保持されました。 提供された引数は、ResultSetのインスタンスのweakref.proxy()
になりました。 celery.result.GroupResult
を使用した場合に発生します。
プロジェクトの開始以来、2番目のメモリリークが存在します。 プリフォークプールは、実行するジョブのキャッシュを維持します。 それらが完了すると、キャッシュから削除されます。 ただし、Celeryがブローカーから切断すると、プールをフラッシュしてジョブを破棄します。ワーカーがそれらを確認すると、後でクリアされることを期待していますが、そうではありませんでした。 代わりに、これらのジョブは永久にメモリに残ります。 フラッシュ中にこれらのジョブをすぐに破棄するようになりました。
Python3.6のサポートを終了しました
CeleryにはPython3.7以降が必要になりました。
Python3.6は2021年12月にEOLに到達します。 努力を集中するために、このバージョンではPython3.6のサポートを終了しました。
それでもPython3.6を使用してCeleryを実行する必要がある場合は、Celery5.1を引き続き使用できます。 ただし、2021年12月23日以降、Python 3.6にはセキュリティパッチが適用されなくなるため、サポートされているPythonバージョンにアップグレードすることをお勧めします。
タスク
タスクを別のタスクに置き換えるときに、replaced_task_nesting
ヘッダーを介してネストレベルの置き換えを示すようになりました。
置き換えられなかったタスクのreplaced_task_nesting
値は0です。
昆布
v5.2以降、最低限必要なバージョンは昆布5.2.0です。
プレフォーク労働者プール
これで、メインプロセスが終了すると、孤立したすべてのワーカープロセスが自動的に強制終了されます。
イベントレットワーカープール
Eventletワーカープールの使用中に、取り消されたタスクの実行を終了できるようになりました。
5.0以降の重要な注意事項
Python2.7および3.5のサポートを終了しました
CeleryにはPython3.6以降が必要になりました。
Python2.7は2020年1月にEOLに達しました。 努力を集中するために、このバージョンではPython2.7のサポートを終了しました。
さらに、Python3.5は2020年9月にEOLに達しました。 そのため、Python3.5のサポートも終了します。
それでもPython2.7またはPython3.5を使用してCeleryを実行する必要がある場合は、Celery4.xを引き続き使用できます。 ただし、Python2.7またはPython3.5にはこれ以上のセキュリティパッチが適用されないため、サポートされているPythonバージョンにアップグレードすることをお勧めします。
Geventワーカープール
v5.0以降、最低限必要なバージョンはgevent1.0.0です。
Couchbase結果バックエンド
Couchbase結果バックエンドはV3CouchbaseSDKを使用するようになりました。
その結果、Couchbase Server5.xはサポートされなくなりました。
また、v5.0以降、データベースクライアントに最低限必要なバージョンはcouchbase3.0.0です。
CouchbaseServerがV3SDKと互換性があることを確認するには、ドキュメントを参照してください。
Riak結果バックエンド
データベースが維持されなくなったため、Riak結果バックエンドは削除されました。
PythonクライアントはPython3.6以下のみをサポートしているため、サポートできず、メンテナンスもされていません。
まだRiakを使用している場合は、アプリケーションを別のデータベースに移行する間、Celery5.0へのアップグレードを控えてください。
事前の通知がないことをお詫び申し上げますが、この重大な変更による影響を受ける可能性はごくわずかであると考えております。
AMQP結果バックエンド
AMQP結果バックエンドは、バージョン4.0で非推奨になったため、削除されました。
非推奨のモジュールを削除
celery.utils.encoding および celery.task モジュールは、バージョン4.0で非推奨になったため、5.0で削除されました。
以前に celery.utils.encoding モジュールを使用していた場合は、代わりに kombu.utils.encoding をインポートする必要があります。
以前に celery.task モジュールを使用していた場合は、代わりに celery モジュールから直接インポートする必要があります。
azure-servicebus 7.0.0が必要になりました
SDKが0.50.0から7.0.0の間で変更されたため、Kombuは古い azure-servicebus バージョンのサポートを廃止します。
バグ:Pymongo3.12.1はCelery5.2と互換性がありません
今のところ、Pymongoのバージョンを制限しており、3.3.0から3.12.0の間のバージョンのみを許可しています。
これは次のパッチで修正される予定です。
ニュース
未登録のタスクのコードを呼び出すためのサポート
以前は、コードをコードの本体として公開するCeleryアプリに登録されていない署名を提供しているときにコードを公開しようとすると、celery.exceptions.NotRegistered
例外が発生していました。
今後、これらの種類のコードを公開すると、正しく実行されます。
# movies.task.publish_movie is registered in the current app
movie_task = celery_app.signature('movies.task.publish_movie', task_id=str(uuid.uuid4()), immutable=True)
# news.task.publish_news is *not* registered in the current app
news_task = celery_app.signature('news.task.publish_news', task_id=str(uuid.uuid4()), immutable=True)
my_chord = chain(movie_task,
group(movie_task.set(task_id=str(uuid.uuid4())),
movie_task.set(task_id=str(uuid.uuid4()))),
news_task)
my_chord.apply_async() # <-- No longer raises an exception
領事結果バックエンド
Consulクライアントのバグを回避するために、Consulへのリクエストごとに新しいクライアントを作成するようになりました。
Consul Result Backendは、新しい:setting: `result_backend_transport_options` キー:one_client
を受け入れるようになりました。 one_client
をTrueに設定すると、この動作をオプトアウトできます。
Consulバックエンドを使用している場合は、バックエンドのドキュメントを参照して、どの動作が適しているかを確認してください。
ファイルシステム結果バックエンド
ほとんどの結果バックエンドと同様に、ファイルシステム結果バックエンドの使用中に期限切れのタスク結果をクリーンアップするようになりました。
ArangoDB結果バックエンド
ArangoDB結果バックエンドへのTLS接続を確立しているときに、CA証明書の有効性を確認できるようになりました。
必要に応じて、:setting: `arangodb_backend_settings`` 辞書のverify
キーをTrue
に設定します。