Celery 4.3(rhubarb)の新機能—Pythonドキュメント
セロリ4.3(ルバーブ)の新機能
- 著者
- Omer Katz(
omer.drow at gmail.com
)
変更履歴
新しいドキュメントではメジャーバージョンの変更について説明しています。バグ修正リリース(0.0.x)の変更を一覧表示する変更履歴もありますが、古いシリーズは履歴セクションにアーカイブされています。 。
Celeryは、膨大な量のメッセージを処理すると同時に、そのようなシステムを維持するために必要なツールを操作に提供する、シンプルで柔軟性があり、信頼性の高い分散システムです。
これは、リアルタイム処理に重点を置いたタスクキューであり、タスクのスケジューリングもサポートしています。
Celeryには、ユーザーと寄稿者の大規模で多様なコミュニティがあります。IRCまたはメーリングリストでに参加する必要があります。
セロリの詳細については、はじめにをお読みください。
このバージョンは以前のバージョンと下位互換性がありますが、次のセクションを読むことが重要です。
このバージョンは、CPython 2.7、3.4、3.5、3.6、および3.7で公式にサポートされており、PyPy2およびPyPy3でもサポートされています。
目次
このバージョンにアップグレードする前に、必ず重要な注意事項をお読みください。
序文
4.3.0リリースでは、Pythonに最適なタスク実行プラットフォームを提供するための取り組みが引き続き改善されています。
このリリースのコードネームは Rhubarb で、Selected Ambient WorksIIのお気に入りのトラックの1つです。
このリリースでは、主にCelery Beat、Canvasのバグ修正、ハングワーカー向けの多数の重要な修正、いくつかの重大なメモリリークの修正に加えて、新しい結果バックエンドや改良されたセキュリティシリアライザーなどの新機能に焦点を当てています。
Celery 4.3は、Python3.7をサポートする最初のリリースです。
次世代のタスク実行プラットフォームであるCelery5での作業を開始するにあたり、4.3がPython2.7をサポートする最後のリリースになることを願っています。
ただし、何らかの理由でCelery 5が遅延する場合は、Python2.7を引き続きサポートする別の4.xマイナーバージョンをリリースする可能性があります。
別の4.xバージョンがリリースされる場合、2019年3月にEOLに達するため、Python3.4のサポートが終了する可能性があります。
また、寄与摩擦の低減にも注力しています。
主要な寄稿者の1人である Josue Balandrano Coronel のおかげで、寄稿ドキュメントが更新されました。 貢献する場合は、お早めにご確認ください。
また、新しい問題テンプレートを追加しました。これは引き続き改善されるため、開いた問題にはより関連性の高い情報が含まれ、問題をより簡単に解決できるようになります。
— Omer Katz
貢献者の壁
アレクサンダーイオアニディス< a.ioannidis.pan@gmail.com > Amir Hossein Saeid Mehr < amir.saiedmehr@gmail.com >アンドレア・ラバグリエッティ< rabbagliettiandrea@gmail.com >アンドレイスカベリン< andrey.skabelin@gmail.com > Anthony Ruhier < anthony.ruhier@gmail.com >アントナン・デルプーチ< antonin@delpeuch.eu > Artem Vasilyev < artem.v.vasilyev@gmail.com > Asif Saif Uddin(Auvi)< auvipy@gmail.com > aviadatsnyk < aviad@snyk.io >アクセルハウスタント< noirbizarre@users.noreply.github.com >ベンジャミンペレート< github@sandchaschte.ch > Bojan Jovanovic < bojan.jovanovic.gtech@gmail.com >ブレット・ジャクソン< brett@brettjackson.org >ブレットランドール< javabrett@gmail.com >ブライアンシュレーダー< brian@brianschrader.com >ブルーノアラ< browniebroke@users.noreply.github.com >バディ< 34044521+CoffeeExpress@users.noreply.github.com >チャールズチャン< charleswhchan@users.noreply.github.com >クリストファーディグナム< chris@dignam.xyz >シアランコートニー< 6096029+ciarancourtney@users.noreply.github.com >クレメンスウルフ< clemens@justamouse.com >コリン・ワトソン< cjwatson@ubuntu.com >ダニエルハーラー< github@thequod.de >ダッシュウィンターソン< dashdanw@gmail.com >デレク・ハーランド< donkopotamus@users.noreply.github.com > Dilip Vamsi Moturi < 16288600+dilipvamsi@users.noreply.github.com > Dmytro Litvinov < litvinov.dmytro.it@gmail.com >ダグラス・ローデ< douglas.rohde2@gmail.com >エドモーリー< 501702 + edmorley@users.noreply.github.com >ファビアンベッカー< halfdan@xnorfz.de >フェデリコボンド< federicobond@gmail.com >豊原陳< cfy1990@gmail.com >フロリアンチャーディン< othalla.lf@gmail.com >ジョージ・プサラキス< giwrgos.psarakis@gmail.com > Guilherme Caminha < gpkc@cin.ufpe.br > ideascf < ideacf@163.com > Itay < itay.bittan@gmail.com >ジェイミーアレッシオ< jamie@stoic.net >ジェイソン開催< jasonsheld@gmail.com >ジェレミー・コーエン< jcohen02@users.noreply.github.com >ジョン・アーノルド< johnar@microsoft.com >ジョン・バナファト< jonathan.banafato@gmail.com > Jon Dufresne < jon.dufresne@gmail.com >ジョシュアエンゲルマン< j.aaron.engelman@gmail.com >ジョシュアシュミット< jschmid@suse.com > Josue Balandrano Coronel < xirdneh@gmail.com > Kデイビス< anybodys@users.noreply.github.com >キドス< ckidoz@gmail.com >山口清裕< kiyoya@gmail.com > Korijn van Golen < korijn@gmail.com >ラース・クルーゼ< devel@sumpfralle.de >ラースリン< lm.rinn@outlook.com >ルイスM。 カブイ< lewis.maina@andela.com > madprogrammer < serg@anufrienko.net >マヌエルバスケスアコスタ< mvaled@users.noreply.github.com >マーカス・マクヘイル< marcus.mchale@nuigalway.ie >マリアッタ< Mariatta@users.noreply.github.com >マリオコステラク< mario@intercom.io >マットウィーンズ< mwiens91@gmail.com > Maximilien Cuony < the-glu@users.noreply.github.com > Maximilien de Bayser < maxdebayser@gmail.com >メイサム< MeysamAzad81@yahoo.com >ミリンド釈迦族< milin@users.noreply.github.com > na387 < na387@users.noreply.github.com >ニコラスピロン< npilon@gmail.com >ニック・パーソンズ< nparsons08@gmail.com > Nik Molnar < nik.molnar@consbio.org >ノアホール< noah.t.hall@gmail.com >ノアム< noamkush@users.noreply.github.com > Omer Katz < omer.drow@gmail.com >PawełAdamczak< pawel.ad@gmail.com >ペンウェイカン< pengwk2@gmail.com > Prathamesh Salunkhe < spratham55@gmail.com >PrzemysławSuliga< 1270737+suligap@users.noreply.github.com > Raf Geens < rafgeens@gmail.com >(◕ᴥ◕)< raton@users.noreply.github.com > Robert Kopaczewski < rk@23doors.com >サミュエルファン< samhuang91@gmail.com >セバスティアン・ウォジチェチョフスキー< 42519683+sebwoj@users.noreply.github.com >イ・スンフン< waydi1@gmail.com >シャナバスM < shanavas.m2@gmail.com >サイモンシャレット< charettes@users.noreply.github.com >サイモンシュミット< schmidt.simon@gmail.com > srafehi < shadyrafehi@gmail.com >スティーブンスクラール< sklarsa@gmail.com >トムブース< thomasbo@microsoft.com >トムクランシー< ClancyTJD@users.noreply.github.com >トニルジャ< gmr.gaf@gmail.com > tothegump < tothegump@gmail.com >ビクターミレエフ< victor@opennodecloud.com > Vikas Prasad < vikasprasad.prasad@gmail.com >ウォルターキアン< walter@color.com >ウィレム< 自分自身@ willemthiart.com >シャオドン< xd_deng@hotmail.com > yywing < 386542536@qq.com >>
ノート
この壁はgitの履歴から自動的に生成されたため、残念ながら、メーリングリストの質問への回答など、より重要なことを支援する人は含まれていません。
Celery4.2からのアップグレード
いくつかの重大な変更があるため、以下の重要な注意事項をお読みください。
重要な注意事項
サポートされているPythonバージョン
サポートされているPythonバージョンは次のとおりです。
- CPython 2.7
- CPython 3.4
- CPython 3.5
- CPython 3.6
- CPython 3.7
- PyPy2.7 6.0(
pypy2
) - PyPy3.5 6.0(
pypy3
)
昆布
このリリース以降、最低限必要なバージョンは昆布4.4です。
新しい圧縮アルゴリズム
Kombu 4.3には、いくつかの新しいオプションの圧縮方法が含まれています。
- LZMA(Python 3を使用している場合はstdlibから、またはバックポートされたパッケージから入手可能)
- Brotli(brotliまたはbrotlipyパッケージのいずれかをインストールした場合に利用可能)
- ZStandard(zstandardパッケージをインストールすると利用可能)
残念ながら、現在のプロトコルは複雑なキャンバスに対して巨大なペイロードを生成します。
この問題を解決するCelery5のCeleryプロトコルの3番目のリビジョンに移行するまで、回避策として新しい圧縮方法の1つを使用してください。
詳細については、圧縮を参照してください。
ビリヤード
このリリース以降、最低限必要なバージョンはビリヤード3.6です。
イベントレットワーカープール
eventlet> = 0.24.1 が必要になりました。
イベントレットワーカープールを使用している場合は、以下を使用してCeleryをインストールしてください。
$ pip install -U celery[eventlet]
MessagePackシリアライザー
非推奨の msgpack-python パッケージをしばらく使用しています。 代わりに msgpack に依存しているため、これは修正されました。
現在MessagePackシリアライザーを使用している場合は、前のパッケージをアンインストールし、次を使用して新しいパッケージを再インストールしてください。
$ pip uninstall msgpack-python -y
$ pip install -U celery[msgpack]
MongoDB結果バックエンド
MongoDB結果バックエンドの DNSシードリスト接続形式をサポートするようになりました。
これには、 dnspython パッケージが必要です。
MongoDB結果バックエンドを使用している場合は、以下を使用してCeleryをインストールしてください。
$ pip install -U celery[mongodb]
Redisメッセージブローカー
以前のバージョンのpy-redisには複数のバグがあり、Celeryで問題が発生していたため、最低限必要なバージョンを3.2.0に上げる必要がありました。
Redis結果バックエンド
以前のバージョンのpy-redisには複数のバグがあり、Celeryで問題が発生していたため、最低限必要なバージョンを3.2.0に上げる必要がありました。
Riak結果バックエンド
公式のRiakクライアントは、現時点ではPython3.7をサポートしていません。
Riak結果バックエンドを使用している場合は、マスターからクライアントをインストールするか、この問題が解決するまでPython3.7へのアップグレードを避けてください。
Python 3.7でRiak結果バックエンドを使用している場合、警告を発するようになりました。
更新については、 basho / riak-python-client#534 を追跡してください。
RabbitMQ2.xのサポートを終了しました
このリリース以降、RabbitMQ2.xは正式にサポートされなくなりました。
2.xの最後のリリースは2012年であり、RabbitMQ3.xの高可用性を正しくサポートするように調整する必要がありました。
何らかの理由でまだRabbitMQ2.xを使用している場合は、セキュリティパッチがRabbitMQ 2.xに適用されなくなったため、できるだけ早くアップグレードすることをお勧めします。
Djangoサポート
このリリース以降、必要なDjangoの最小バージョンは1.11です。
改良された認証シリアライザー
認証シリアライザーは完全なオーバーホールを受けました。 以前はひどく壊れていました。
このシリアライザーは、 pyOpenSSL ではなく cryptography に依存するようになりました。
詳細については、メッセージ署名を参照してください。
ニュース
ブローカー
SSLURIのRedisブローカーサポート
RedisブローカーがSSL接続をサポートするようになりました。
通常どおり:setting: `broker_use_ssl` を使用し、 rediss:// URIを使用できます。
SSL構成パラメーターをURIに渡すこともできます。
rediss:// localhost:3456?ssl_keyfile = keyfile.key&ssl_certfile = authentication.crt&ssl_ca_certs = ca.pem&ssl_cert_reqs = CERT_REQUIRED
構成可能なPidbox交換名
以前は、Pidbox交換名はハードコーディングされていました。
:setting: `control_exchange` を使用して決定できます。 デフォルト値は同じままです。
結果のバックエンド
SSLURIのRedis結果バックエンドサポート
Redis結果バックエンドでSSL接続がサポートされるようになりました。
:setting: `redis_backend_use_ssl` を使用して構成し、 rediss:// URIを使用できます。
SSL構成パラメーターをURIに渡すこともできます。
rediss:// localhost:3456?ssl_keyfile = keyfile.key&ssl_certfile = authentication.crt&ssl_ca_certs = ca.pem&ssl_cert_reqs = CERT_REQUIRED
結果に拡張タスクメタデータを保存する
:setting: `result_extended` が True の場合、バックエンドは次のメタデータを保存します。
- タスク名
- 引数
- キーワード引数
- タスクが実行されたワーカー
- 再試行回数
- キューの名前またはルーティングキー
さらに、celery.app.task.update_state()
はキーワード引数を受け入れるようになり、結果とともにカスタムデータを保存できるようになりました。
別のシリアライザーを使用して結果をエンコードする
:setting: `result_accept_content` 設定を使用すると、結果バックエンドにさまざまな受け入れ済みコンテンツを構成できます。
署名されたメッセージングには特別なシリアライザー( auth )が使用されますが、結果のバックエンドに暗号化されたコンテンツが必要ないため、result_serializerはjsonに残ります。
結果のバックエンドから署名されていないコンテンツを受け入れるために、この新しい構成オプションを導入して、バックエンドから受け入れられるコンテンツを指定しました。
新しい結果バックエンド
このリリースでは、4つの新しい結果バックエンドが導入されています。
- S3結果バックエンド
- ArangoDB結果バックエンド
- Azure Block BlobStorageの結果バックエンド
- CosmosDB結果バックエンド
S3結果バックエンド
Amazon Simple Storage Service(Amazon S3)は、AWSによるオブジェクトストレージサービスです。
結果は、次のパステンプレートを使用して保存されます。
< :setting: `s3_bucket` > / < :setting: `s3_base_path` > /
詳細については、 S3バックエンド設定を参照してください。
ArangoDB結果バックエンド
ArangoDBは、検索機能を備えたネイティブのマルチモデルデータベースです。 バックエンドは、結果を次のドキュメント形式で保存します。
{
_key:{key}、
task: {task}
}
詳細については、 ArangoDBバックエンド設定を参照してください。
Azure Block BlobStorageの結果バックエンド
Azure Block Blob Storageは、Microsoftによるオブジェクトストレージサービスです。
バックエンドは、結果を次のパステンプレートに保存します。
詳細については、 Azure BlockBlobバックエンド設定を参照してください。
CosmosDB結果バックエンド
Azure Cosmos DBは、Microsoftのグローバルに分散されたマルチモデルデータベースサービスです。
バックエンドは、結果を次のドキュメント形式で保存します。
{
id: {key},
value: {task}
}
詳細については、 CosmosDBバックエンド設定(実験的)を参照してください。
タスク
Cythonizedタスク
Cythonizedタスクがサポートされるようになりました。 @task デコレータを使用してタスクを指定するCコードをCythonから生成でき、すべてがまったく同じように機能するはずです。
失敗またはタイムアウトに関するタスクの確認
:setting: `task_acks_late` が True に設定されている場合、タスクは失敗またはタイムアウト時に確認されます。 これにより、デッドレターキューと交換を使用することが困難になります。
Celery 4.3では、新しい:setting: `task_acks_on_failure_or_timeout` が導入されました。これにより、:setting:` task_acks_late` がに設定されていても、タスクが失敗またはタイムアウトした場合にタスクの確認を回避できます。 True 。
:setting: `task_acks_on_failure_or_timeout` はデフォルトで True に設定されています。
スケジュールがマイクロ秒をサポートするようになりました
セロリビートマイクロ秒を使用してタスクをスケジュールする場合、無視されなくなりました。
デフォルトのタスク優先度
:setting: `task_default_priority` 設定を使用して、タスクのデフォルトの優先度を設定できるようになりました。 特定のタスクに優先順位が指定されていない場合は、設定の値が使用されます。
タスクはオプションで親の優先順位を継承します
:setting: `task_inherit_parent_priority` 構成オプションを True に設定すると、Celeryタスクはそれにリンクされている前のタスクの優先度を継承します。
例:
c = celery.chain(
add.s(2), # priority=None
add.s(3).set(priority=5), # priority=5
add.s(4), # priority=5
add.s(5).set(priority=3), # priority=3
add.s(6), # priority=3
)
@app.task(bind=True)
def child_task(self):
pass
@app.task(bind=True)
def parent_task(self):
child_task.delay()
# child_task will also have priority=5
parent_task.apply_async(args=[], priority=5)
キャンバス
設定可能なコード結合タイムアウト
以前は、celery.result.GroupResult.join()
のタイムアウトは3秒に固定されていました。
:setting: `result_chord_join_timeout` 設定で、変更できるようになりました。
デフォルトは3秒のままです。