Celery 5.1(Sun Harmonics)の新機能—Pythonドキュメント
Celery 5.1(Sun Harmonics)の新機能
- 著者
- Josue Balandrano Coronel(
jbc at rmcomplexity.com
)
変更履歴
新しいドキュメントではメジャーバージョンの変更について説明しています。バグ修正リリース(0.0.x)の変更を一覧表示する変更履歴もありますが、古いシリーズは履歴セクションにアーカイブされています。 。
Celeryは、Pythonで分散システムを維持するために必要なツールを操作に提供しながら、大量のメッセージを処理するためのシンプルで柔軟性があり、信頼性の高い分散プログラミングフレームワークです。
これは、リアルタイム処理に重点を置いたタスクキューであり、タスクのスケジューリングもサポートしています。
Celeryには、ユーザーと寄稿者の大規模で多様なコミュニティがあります。IRCまたはメーリングリストでに参加する必要があります。
セロリの詳細については、はじめにをお読みください。
このバージョンは以前のバージョンとほとんど下位互換性がありますが、このリリースは新しいメジャーバージョンであるため、次のセクションを読むことが重要です。
このバージョンは、CPython 3.6、3.7、3.8、および3.9で公式にサポートされており、PyPy3でもサポートされています。
目次
このバージョンにアップグレードする前に、必ず重要な注意事項をお読みください。
- 序文
- Celery4.xからのアップグレード
- 重要な注意事項
- ニュース
- Azure Service Bus7.0.0のサポート
- SQLAlchemy1.4のサポートを追加します
- Redisユーザー名認証のサポート
- SQSトランスポート-バックオフポリシーのサポート
- 成功したタスクを複製する
- 接続が失われたことを確認するのが遅れてタスクを終了する
- task.apply_async(ignore_result = True)は、結果の永続化を回避するようになりました
- cached_property のスレッドセーフな実装を使用します
- タスクは、任意の順序で必要なkwargsを持つことができるようになりました
- SQS-AWSでSTS認証をサポート
- Redisのサポート health_check_interval
- デフォルトのpickleプロトコルバージョンを4に更新します
- SSLでRedisSentinelをサポートする
序文
5.1.0リリースは、Celeryの新しいマイナーリリースです。
今から、ユーザーはメジャーバージョンのより頻繁なリリースを期待する必要があります。私たちは速く動き、物事を壊して、さらに良い体験をもたらします。
5.xシリーズのリリースは、 Jon Hopkins の曲にちなんでコードネームが付けられています。 このリリースのコードネームは Sun Harmonics です。
今後は、Python3.6以降のみをサポートします。 2021年12月のEOLになるまで、Python3.6との互換性を維持します。
— Omer Katz
長期サポートポリシー
移行するための時間を提供したいので、Celery 4.xLTSリリースを指定します。 Celery 4.xは、2021年8月1日までサポートされます。
バグ修正とセキュリティ問題のパッチを受け入れて適用します。 ただし、そのバージョンの新機能はマージされません。
Celery 5.x はLTSリリースではありません。 Celery6.xのリリースまでサポートします。
現在、ロングタームサポートポリシーを定義中です。 更新については、次の「新着情報」ドキュメントをご覧ください。
貢献者の壁
0xflotus < [email protected] > AbdealiJK < [email protected] >アナトリイ< [email protected] >アンナボルゼンコ< [email protected] >アルセニ< [email protected] > Asif Saif Uddin(Auvi)< [email protected] > Asif Saif Uddin < [email protected] > Awais Qureshi < [email protected] > careljonkhout < [email protected] >クリスチャンクラウス< [email protected] > danthegoodman1 < [email protected] >デイブ・ヨハンセン< [email protected] >デヴィッド・シュナイダー< [email protected] >ファーミ< [email protected] >フェリックスヤン< [email protected] > Gabriel Augendre < [email protected] >ガルコーエン< [email protected] >ガル・コーヘン< [email protected] > Geunsik Lim < [email protected] >ギヨームデピネデピネ< [email protected] >ヒルマルヒルマルソン< [email protected] > Illia Volochii < [email protected] >ジェンハオヤン< [email protected] >ジョナサンストップパニ< [email protected] > Josue Balandrano Coronel < [email protected] > kosarchuksn < [email protected] > Kostya Deev < [email protected] >マットホフマン< [email protected] > Matus Valo < [email protected] >ミョンソクソ< [email protected] >ノアム< [email protected] > Omer Katz < [email protected] >パブロスカリス< [email protected] >PavolPlaskoň< [email protected] >鵬傑歌(宋鹏捷)< [email protected] > Sardorbek Imomaliev < [email protected] >セルゲイリアプスティン< [email protected] >セルゲイ・チーホノフ< [email protected] >スティーブンJ。 フーリー< [email protected] > Swen Kooij < [email protected] > tned73 < [email protected] > Tomas Hrnciar < [email protected] > tumb1er < [email protected] >>
ノート
この壁は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.1にアップグレードする
この時点で、ワーカーとクライアントを新しいバージョンにアップグレードできます。
重要な注意事項
サポートされているPythonバージョン
サポートされているPythonバージョンは次のとおりです。
- CPython 3.6
- CPython 3.7
- CPython 3.8
- CPython 3.9
- PyPy3.6 7.2(
pypy3
)
重要な注意事項
昆布
v5.1以降、最低限必要なバージョンはKombu5.1.0です。
ビリヤード
v5.1以降、最低限必要なバージョンはBilliard3.6.4です。
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 モジュールから直接インポートする必要があります。
from celery.task import Task を使用していた場合は、代わりに from celery import Task を使用する必要があります。
celery.task デコレータを使用していた場合は、代わりに celery.shared_task を使用する必要があります。
azure-servicebus 7.0.0が必要になりました
SDKが0.50.0から7.0.0の間で変更されたため、Kombuは古い azure-servicebus バージョンのサポートを廃止します。
ニュース
Azure Service Bus7.0.0のサポート
Kombu v5.1.0では、Azure ServicesBusをサポートするようになりました。
Azureは、Azure ServiceBusSDKを0.50.0から7.0.0の間で完全に変更しました。 昆布 5.1.0 には azure-servicebus> = 7.0.0 が必要になりました
SQLAlchemy1.4のサポートを追加します
SQLAlchemy 1.4での変更に伴い、宣言型ベースは拡張機能ではなくなりました。 sqlalchemy.ext.declarativeからのインポートは非推奨であり、SQLAlchemy2.0で削除されます。
Redisユーザー名認証のサポート
以前は、ユーザー名はURIから無視されていました。 Redis> = 6.0から、ACLサポートが開始されたため、そうではないはずです。
詳細については、ドキュメントを参照してください。
SQSトランスポート-バックオフポリシーのサポート
SQSは、マネージドビジビリティタイムアウトをサポートするようになりました。 これにより、バックオフポリシー(たとえば、指数ポリシー)を実装できます。これは、タスクの失敗間の時間が再試行回数に基づいて動的に変化することを意味します。
ドキュメント: reference / kombu.transport.SQS.rst
成功したタスクを複製する
トレース関数は、タスクを受信するたびにバックエンドからメタデータをフェッチし、その状態を比較します。 状態がSUCCESSの場合、タスクを実行する代わりにログに記録してベイルします。 タスクが確認され、すべてが正常に進行します。
ドキュメント::setting: `worker_deduplicate_successful_tasks`
接続が失われたことを確認するのが遅れてタスクを終了する
確認応答が遅れたタスクは、再起動後も実行を続けますが、接続が失われ、確認応答ができなくなります。 これらのタスクは終了します。
ドキュメント::setting: `worker_cancel_long_running_tasks_on_connection_loss`
task.apply_async(ignore_result = True)は、結果の永続化を回避するようになりました
task.apply_async は、 ignore_result の受け渡しをサポートするようになりました。これは、@app.task(ignore_result=True)
を使用する場合と同じように機能します。
cached_property のスレッドセーフな実装を使用します
cached_property はセロリで頻繁に使用されますが、スレッドセーフではないため、マルチスレッドコードで問題が発生しています。 Celeryは現在、 cached_property のスレッドセーフな実装を使用しています。
タスクは、任意の順序で必要なkwargsを持つことができるようになりました
タスクは次のように定義できるようになりました。
from celery import shared_task
@shared_task
def my_func(*, name='default', age, city='Kyiv'):
pass
SQS-AWSでSTS認証をサポート
STSトークンは、一定期間後に更新する必要があります。 sts_token_timeout に達すると、新しいトークンが作成されます。
ドキュメント: getting-started / backends-and-brokers / sqs.rst
Redisのサポート health_check_interval
health_check_interval を構成でき、 redis-py に渡されます。
ドキュメント::setting: `redis_backend_health_check_interval`
デフォルトのpickleプロトコルバージョンを4に更新します
ピクルスプロトコルのバージョンが更新され、Celeryが他の利点の中でも特に大きな文字列をシリアル化できるようになりました。
参照: https://docs.python.org/3.9/library/pickle.html#data-stream-format
SSLでRedisSentinelをサポートする
詳細については、ドキュメントを参照してください: getting-started / backends-and-brokers / redis.rst