Celery 1.0の変更履歴—Pythonドキュメント

提供:Dev Guides
Celery/docs/latest/history/changelog-1.0
移動先:案内検索

Celery1.0の変更履歴

1.0.6

発売日
2010-06-30 09:57 am CEST
リリースバイ
ソレムに聞く
  • RabbitMQ 1.8.0は、交換等価テストを拡張して、 auto_delete および durable を含めました。 これにより、AMQPバックエンドが破損しました。

    すでにAMQPバックエンドを使用している場合、これは以前の定義を削除する必要があることを意味します。

    $ camqadm exchange.delete celeryresults

    また:

    $ python manage.py camqadm exchange.delete celeryresults


1.0.5

発売日
2010-06-01 02:36 pm CEST
リリースバイ
ソレムに聞く

致命的

  • :sig: `INT` / Control-c はプールを強制終了し、現在実行中のタスクを突然終了しました。

    プールワーカープロセスがSIGINTを無視するようにすることで修正されました。

  • プールが終了する前にコンシューマーを閉じないでください。コンシューマーをキャンセルするだけです。

    問題#122を参照してください。

  • :pypi: `billiard` > = 0.3.1に依存するようになりました

  • ワーカー:以前はワーカーコンポーネントによって発生した例外が起動を停止する可能性がありましたが、現在は例外を正しくログに記録してシャットダウンします。

  • ワーカー:プリフェッチカウントの設定が遅すぎました。 QoSができるだけ早く設定されるようになったため、worker:は起動時にすべてのメッセージを丸呑みすることはできません。


変更点

  • celery.contrib.abortable:中止可能なタスク。

    実行のステップを定義するタスク。各ステップが完了した後、タスクを中止できます。

  • EventDispatcher:イベントが無効になっている場合にAMQPチャネルを作成しなくなりました

  • setup.pyを使用したソースからのRPMの構築をサポートするために、 [bdist_rpm] セクションに必要なRPMパッケージ名を追加しました。

  • 単体テストの実行: NOSE_VERBOSE環境変数で、Noseからの詳細な出力が有効になりました。

  • celery.execute.apply():ログファイル/ログレベルの引数をタスクkwargsとして渡します。

    問題#110を参照してください。

  • celery.execute.apply:エラー時にExceptionInfoではなく、例外を返す必要があります。

    問題#111を参照してください。

  • FAQ に新しいエントリを追加しました。

    • 再試行またはacks_lateを使用する必要がありますか?

    • タスクを名前で呼び出すことはできますか?



1.0.4

発売日
2010-05-31 09:54 am CEST
リリースバイ
ソレムに聞く
  • リリースが発表されなかったため、Changelogは1.0.5とマージされました。


1.0.3

発売日
2010-05-15 03:00 pm CEST
リリースバイ
ソレムに聞く

重要な注意事項

  • タスク機能が実行される直前にメッセージが確認されるようになりました

    これは私たちがずっと望んでいた動作ですが、マルチプロセッシングモジュールの制限のために実現できませんでした。 以前の動作は良くなく、1.0.1のリリースで状況が悪化したため、この変更により、信頼性、パフォーマンス、および操作全般が確実に改善されます。

    詳細については、 http://bit.ly/9hom6Tを参照してください。

  • データベース結果バックエンド:resultは、 null = True を django-picklefield バージョン0.1.5として明示的に設定するようになり、鼻のすぐ下のデフォルトの動作が変更されました:(

    参照: http://bit.ly/d5OwMr

    つまり、:pypi: `django-picklefield`` バージョン> = 0.1.5で(syncdbまたはceleryinitを介して)Celeryテーブルを作成した人は、自分のCeleryテーブルを変更する必要があります。結果フィールドを手動で NULL にすることができるテーブル。

    MySQL:

    ALTER TABLE celery_taskmeta MODIFY result TEXT NULL

    PostgreSQL:

    ALTER TABLE celery_taskmeta ALTER COLUMN result DROP NOT NULL
  • Task.rate_limit_queue_type はあまり役に立たず、一部のパーツのリファクタリングが困難になったため、削除されました。

  • ニンジンに依存する> = 0.10.4

  • ビリヤードに依存> = 0.3.0


ニュース

  • AMQPバックエンド: result.get() / result.wait()のタイムアウトサポートが追加されました。

  • 新しいタスクオプション: Task.acks_late (デフォルト::setting: `CELERY_ACKS_LATE`

    Late ackは、タスクが実行された後にタスクメッセージが確認されることを意味します。デフォルトの動作であるの直前ではありません。

    ノート

    これは、実行中にワーカーがクラッシュした場合、タスクが2回実行される可能性があることを意味します。 ほとんどのアプリケーションでは受け入れられませんが、他のアプリケーションでは望ましいです。

  • 定期的なタスクにCrontabのようなスケジューリングを追加しました。

    cronジョブと同様に、タスクを実行する時間の単位を指定できます。 cron の機能の完全な実装ではありませんが、かなりの程度の一般的なスケジューリングのニーズを提供するはずです。

    分(0-59)、時間(0-23)、および/または曜日(0-6、0は日曜日、または名前:sun, mon, tue, wed, thu, fri, sat)を指定できます。

    例:

    from celery.schedules import crontab
    from celery.decorators import periodic_task
    
    @periodic_task(run_every=crontab(hour=7, minute=30))
    def every_morning():
        print('Runs every morning at 7:30a.m')
    
    @periodic_task(run_every=crontab(hour=7, minute=30, day_of_week='mon'))
    def every_monday_morning():
        print('Run every monday morning at 7:30a.m')
    
    @periodic_task(run_every=crontab(minutes=30))
    def every_hour():
        print('Runs every hour on the clock (e.g., 1:30, 2:30, 3:30 etc.).')

    ノート

    これは遅い追加です。 単体テストはありますが、この機能の性質上、実際には完全にテストすることはできませんでした。この実験を検討してください。

  • TaskPool.apply_async : accept_callback 引数をサポートするようになりました。

  • apply_async :タスク引数がリストでない場合、またはkwargsがタプルでない場合に、ValueErrorを発生させるようになりました(問題#95)。

  • Task.max_retries を None にできるようになりました。これは、永久に再試行することを意味します。

  • celerybeat:タスクの大規模なセットを公開するときに同じ接続を再利用するようになりました。

  • ドキュメントのタスクロックの例を変更して、アトミックロックに cache.add を使用するようにしました。

  • タスクの開始ステータスの実験的なサポートが追加されました。

    Task.track_started が有効になっている場合、タスクがワーカーによって実行されると、タスクはそのステータスを「開始済み」として報告します。

    通常の動作ではそのレベルの粒度が報告されないため、デフォルト値は False です。 タスクは保留中、終了中、または再試行待ちのいずれかです。 「開始済み」ステータスを持つことは、長時間実行されているタスクがあり、現在実行中のタスクを報告する必要がある場合に役立ちます。

    グローバルデフォルトは、:setting: `CELERY_TRACK_STARTED` 設定で上書きできます。

  • ユーザーガイド:新しいセクションヒントとベストプラクティス。

    貢献を歓迎します!


リモートコントロールコマンド

  • リモートコントロールコマンドは、応答を発信者に送り返すことができるようになりました。

    返信を送信するように既存のコマンドが改善され、 celery.task.control のクライアントインターフェイスに新しいキーワード引数が追加されました: reply 、 timeout 、 limit 。 応答が応答を待機することを意味する場合、タイムアウトは応答の待機を停止する秒単位の時間であり、制限は取得する応答の最大数です。

    デフォルトでは、1秒間できるだけ多くの応答を待ちます。

    • rate_limit(task_name、destination = all、reply = False、timeout = 1、limit = 0)

      ワーカーは、成功すると {'ok':メッセージ} を返し、失敗すると {'failure':メッセージ} を返します。

      >>> from celery.task.control import rate_limit
      >>> rate_limit('tasks.add', '10/s', reply=True)
      [{'worker1': {'ok': 'new rate limit set successfully'}},
       {'worker2': {'ok': 'new rate limit set successfully'}}]
    • ping(destination = all、reply = False、timeout = 1、limit = 0)

      ワーカーは単純なメッセージ「pong」を返します。

      >>> from celery.task.control import ping
      >>> ping(reply=True)
      [{'worker1': 'pong'},
       {'worker2': 'pong'},
    • revoke(destination = all、reply = False、timeout = 1、limit = 0)

      ワーカーは単に True を返します。

      >>> from celery.task.control import revoke
      >>> revoke('419e46eb-cf6a-4271-86a8-442b7124132c', reply=True)
      [{'worker1': True},
       {'worker2'; True}]


  • これで、独自のリモートコントロールコマンドを追加できます。

    リモートコントロールコマンドは、コマンドレジストリに登録されている機能です。 コマンドの登録は、celery.worker.control.Panel.register()を使用して行われます。

    from celery.task.control import Panel
    
    @Panel.register
    def reset_broker_connection(state, **kwargs):
        state.consumer.reset_connection()
        return {'ok': 'connection re-established'}

    このモジュールをワーカーにインポートすると、 celery.task.control.broadcast を使用してコマンドを起動できます。

    >>> from celery.task.control import broadcast
    >>> broadcast('reset_broker_connection', reply=True)
    [{'worker1': {'ok': 'connection re-established'},
     {'worker2': {'ok': 'connection re-established'}}]

    ヒント destination 引数を使用して、コマンドを受信するワーカーを選択できます。

    >>> broadcast('reset_broker_connection', destination=['worker1'])
    [{'worker1': {'ok': 'connection re-established'}]
  • 新しいリモートコントロールコマンド: dump_reserved

    実行されるのを待っている、ワーカーによって予約されたタスクをダンプします。

    >>> from celery.task.control import broadcast
    >>> broadcast('dump_reserved', reply=True)
    [{'myworker1': [<TaskRequest ....>]}]
  • 新しいリモートコントロールコマンド: dump_schedule

    現在登録されているETAスケジュールをダンプします。 これらは、 eta (または countdown )引数がワーカーによる実行を待機しているタスクです。

    >>> from celery.task.control import broadcast
    >>> broadcast('dump_schedule', reply=True)
    [{'w1': []},
     {'w3': []},
     {'w2': ['0. 2010-05-12 11:06:00 pri0 <TaskRequest
                {name:'opalfeeds.tasks.refresh_feed_slice',
                 id:'95b45760-4e73-4ce8-8eac-f100aa80273a',
                 args:'(<Feeds freq_max:3600 freq_min:60
                               start:2184.0 stop:3276.0>,)',
                 kwargs:'{'page': 2}'}>']},
     {'w4': ['0. 2010-05-12 11:00:00 pri0 <TaskRequest
                {name:'opalfeeds.tasks.refresh_feed_slice',
                 id:'c053480b-58fb-422f-ae68-8d30a464edfe',
                 args:'(<Feeds freq_max:3600 freq_min:60
                               start:1092.0 stop:2184.0>,)',
                 kwargs:'{\'page\': 1}'}>',
            '1. 2010-05-12 11:12:00 pri0 <TaskRequest
                {name:'opalfeeds.tasks.refresh_feed_slice',
                 id:'ab8bc59e-6cf8-44b8-88d0-f1af57789758',
                 args:'(<Feeds freq_max:3600 freq_min:60
                               start:3276.0 stop:4365>,)',
                 kwargs:'{\'page\': 3}'}>']}]


修正

  • メディエータースレッドは、1秒を超えてブロックしなくなりました。

    レート制限が有効になっていて、残り時間が長い場合、メディエータースレッドはシャットダウンをブロックする可能性があります(そして、他のジョブの着信をブロックする可能性があります)。

  • リモートレート制限が適切に適用されていませんでした(問題#98)。

  • TaskRequest.on_failure でUnicodeメッセージの例外を正しく処理するようになりました。

  • データベースバックエンド: TaskMeta.result :デフォルト値は None である必要があります。空の文字列ではありません。


1.0.2

発売日
2010-03-31 12:50 pm CET
リリースバイ
ソレムに聞く
  • 非推奨::setting: `CELERY_BACKEND` 、代わりに:setting:` CELERY_RESULT_BACKEND` を使用してください。

  • 現在、タスクでカスタムロガーを使用しています。 このロガーは、フォーマットでタスクマジックキーワード引数をサポートします。

    タスクのデフォルト形式(:setting: `CELERYD_TASK_LOG_FORMAT` )に、タスクのIDと名前が含まれるようになり、タスクログメッセージの発信元を簡単に追跡できるようになりました。

    出力例::
    [2010-03-25 13:11:20,317:INFO / PoolWorker-1]

    [tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] addからこんにちは

    以前の動作に戻すには、次のように設定できます。

    CELERYD_TASK_LOG_FORMAT = """
        [%(asctime)s: %(levelname)s/%(processName)s] %(message)s
    """.strip()
  • 単体テスト:djangoテストデータベースの破棄を無効にしないでください。代わりに、 DATABASE_NAME 設定の変更によって引き起こされた根本的な問題を修正しました(問題#82)。

  • Djangoローダー:新しい構成:setting: `CELERY_DB_REUSE_MAX` (同じデータベース接続を再利用するタスクの最大数)

    デフォルトでは、すべてのタスクに新しい接続を使用します。 接続を再利用したいのですが、安全な再利用回数がわからず、データベースに依存する可能性のあるエラーを処理する方法がありません。

    参照: http://bit.ly/94fwdd

  • ワーカー:ワーカーコンポーネントが構成可能になりました::setting: `CELERYD_POOL`:setting:` CELERYD_CONSUMER`:setting: `CELERYD_MEDIATOR` 、および[ X166X]:setting: `CELERYD_ETA_SCHEDULER` 。

    デフォルトの構成は次のとおりです。

    CELERYD_POOL = 'celery.concurrency.processes.TaskPool'
    CELERYD_MEDIATOR = 'celery.worker.controllers.Mediator'
    CELERYD_ETA_SCHEDULER = 'celery.worker.controllers.ScheduleController'
    CELERYD_CONSUMER = 'celery.worker.consumer.Consumer'

    :setting: `CELERYD_POOL` 設定を使用すると、マルチプロセッシングプールをスレッドプールと簡単に交換できます。ツイスト/イベントレットプールはどうでしょうか。

    最初のプールプラグインの競争が始まったことを考えてみてください!

  • Debian init-scripts:使用する -NS いいえ && (問題#82)。

  • Debian init-scripts: / etc / default / celeryd および / etc / default / celerybeat から $ CELERYD_OPTS を常に保持するようになりました。

  • celery.beat.Scheduler:スケジュールが適切に初期化されていなかった場合に、スケジュールがディスクに適切にフラッシュされなかったバグを修正しました。

  • celerybeat:sig: `SIGTERM` および:sig:` SIGINT` 信号を受信したときに、スケジュールをディスクに同期するようになりました。

  • 制御コマンド:キーワード引数がUnicodeでないことを確認してください。

  • ETAスケジューラー:ロガーオブジェクトが欠落していたため、タスクが取り消されたことをログに記録しようとすると、スケジューラーがクラッシュしました。

  • management.commands.camqadm:タイプミス camqpadm -> camqadm を修正しました(問題#83)。

  • PeriodicTask.delta_resolution:何日も何時間も機能していませんでしたが、最も近い日/時間に丸めることで修正されました。

  • BaseAsyncResult .__ eq __ の潜在的な無限ループを修正しましたが、これまでにトリガーされたという証拠はありません。

  • ワーカー:エンコードの問題があるメッセージを確認してエラーメッセージを発行することにより、メッセージを処理するようになりました。


1.0.1

発売日
2010-02-24 07:05 pm CET
リリースバイ
ソレムに聞く
  • タスクは、遅くではなく早く承認されるようになりました。

    これが行われるのは、メッセージは同じ接続チャネル内でのみ確認応答できるためです。接続が失われた場合は、メッセージを再度フェッチして確認応答する必要があります。

    これは影響する場合と影響しない場合がありますが、ワーカーが安全に終了する前に、プールに到達したすべてのタスクを実行する必要があるため、実行時間が非常に長い実行中のタスクが影響を受けます(これはせいぜいプールワーカーの数に:setting: `CELERYD_PREFETCH_MULTIPLIER` 設定を掛けたもの)。

    デフォルトでプリフェッチカウントを乗算して、実行時間が短いタスクのバーストが発生する場合のパフォーマンスを向上させます。 これがユースケースに当てはまらない場合は、パフォーマンスを犠牲にすることなく、プリフェッチ乗数をゼロに設定できるはずです。

    ノート

    multiprocessingへのパッチは現在作業中です。このパッチにより、より良いソリューションを使用できるようになり、 2.0.0 リリースに含まれる予定です。

  • :sig: `SIGTERM` 信号を受信すると、ワーカーは正常にシャットダウンするようになりました。

  • :sig: `SIGINT` シグナルが受信された場合( Control-c )、ワーカーはコールドシャットダウンを実行するようになりました。これは、できるだけ早く終了しようとすることを意味します。

  • 結果のキャッシュが基本バックエンドクラスに移動したため、この機能を基本クラスに実装する必要はありません。

  • キャッシュのサイズも制限されるようになったため、キャッシュの使用量が制御不能になることはありません。

    :setting: `CELERY_MAX_CACHED_RESULTS` 設定を使用して、キャッシュが保持できる結果の最大数を設定できます(デフォルトは5000件の結果です)。 さらに、 backend.reload_task_result + backend.reload_taskset_result を使用して、すでに取得した結果を再フェッチできます(これは、結果を段階的に送信する場合に使用します)。

  • ワーカーはWindowsで再び動作するようになりました。

    警告

    DjangoでCeleryを使用している場合、設定モジュール名として project.settings を使用することはできませんが、以下は機能するはずです。

    $ python manage.py celeryd --settings=settings
  • 実行: .messaging.TaskPublisher.send_task には、apply_asyncが以前行っていたすべての機能が組み込まれています。

    カウントダウンをETAに変換するのと同じように、celery.execute.apply_async()は、タスククラスのデフォルトオプションを使用して、celery.messaging.TaskPublisher.send_task()への便利なフロントエンドになりました。

    また、celery.execute.send_task()が導入されました。これは、タスク名だけを使用してタスクを適用できます(クライアントのタスクレジストリに宛先タスクがない場合に便利です)。

    例:

    >>> from celery.execute import send_task
    >>> result = send_task('celery.ping', args=[], kwargs={})
    >>> result.get()
    'pong'
  • camqadm :これはAMQPAPIへのコマンドラインアクセス用の新しいユーティリティです。

    キュー/バインディング/交換の削除、実験、テストに最適です。

    $ camqadm
    1> help

    インタラクティブシェルを提供します。コマンドのリストについては、 help と入力してください。

    Djangoを使用する場合は、代わりに管理コマンドを使用してください。

    $ python manage.py camqadm
    1> help
  • Redis結果バックエンド:最近のRedis APIの変更に準拠するために、次の設定は非推奨になりました。

    • REDIS_TIMEOUT

    • REDIS_CONNECT_RETRY


    これらを使用すると、 DeprecationWarning が発行されます。

    REDIS_PASSWORD 設定が追加されたため、Redisの新しいシンプルな認証メカニズムを使用できます。

  • これは明らかにRedis自体によってより適切に処理されるため、redis結果バックエンドは切断時に SAVE を呼び出さなくなりました。

  • settings.DEBUG がオンの場合、ワーカーは、メモリリークが発生する可能性があることを警告するようになりました。

  • ETAスケジューラーは、反復の間に最大2秒スリープするようになりました。

  • ETAスケジューラーは、発生する可能性のある取り消されたタスクをすべて削除するようになりました。

    取り消しはまだ永続的ではないため、これは、たとえば、ETAが1週間先であるために現在保留されている場合でも、タスクが確実に取り消されるようにするために行われます。

  • task_id 引数は、タスクが熱心に実行された場合でも尊重されるようになりました(applyを使用するか、:setting: `CELERY_ALWAYS_EAGER` を使用)。

  • 接続がリセットされると、内部キューがクリアされるようになりました。

  • 新しい魔法のキーワード引数: delivery_info 。

    同じexchange / routing_keyを使用してタスクを元の宛先に再送信するためにretry()によって使用されます。

  • イベント:フィールドが .send()によって渡されませんでした(celerymonのUUIDキーエラーを修正します)

  • –schedule / -s オプションがワーカーに追加されたため、組み込みcelerybeatサーバー(- B / –beat )オプション。

  • Python2.4との互換性が向上しました。 これで、テストスイートに合格しました。

  • タスクデコレータ:docstringを cls .__ doc __ として保持するようになりました(以前は cls.run .__ doc __ にコピーされていました)

  • testproj ディレクトリの名前が tests に変更され、テスト検出に nose + django-nose を使用し、[X148X ] unittest2 テストケース用。

  • requirementsで利用可能な新しいpip要件ファイル。

  • TaskPublisher:宣言は(プロセスごとに)1回行われるようになりました。

  • Task.delivery_mode と:setting: `CELERY_DEFAULT_DELIVERY_MODE` 設定を追加しました。

    これらは、メッセージを非永続的にマークするために使用できます(つまり、ブローカーを再起動するとメッセージは失われます)。

  • Djangoを使用する代わりに、独自の ImpproperlyConfigured 例外が発生しました。

  • Debian init-scriptsの改善:プログラムが実行可能でない場合、エラーを表示します。 virtualenvでdjangoを使用する場合、 CELERYD を変更しません。


1.0.0

発売日
2010-02-10 04:00 pm CET
リリースバイ
ソレムに聞く

後方互換性のない変更

  • Celeryはデタッチをサポートしなくなったため、プラットフォームで使用可能なツール、または:pypi: `supervisor` などを使用してceleryd / celerybeatを作成する必要があります。 / celerymonをバックグラウンドプロセスに。

    ワーカーがそれ自体をデーモン化する際に問題が多すぎたため、削除する必要があると判断されました。 起動スクリプトの例が extra / ディレクトリに追加されました。

    • Debian、Ubuntu、( start-stop-daemon

      extra / debian / init.d / celeryd extra / debian / init.d / celerybeat

    • macOS 起動

      extra / mac / org.celeryq.celeryd.plist extra / mac / org.celeryq.celerybeat.plist extra / mac / org.celeryq.celerymon.plist

    • スーパーバイザー( http://supervisord.org

      extra / supervisord / supervisord.conf

    –detach に加えて、次のプログラム引数が削除されました: –uid 、 –gid 、 –workdir 、 –chroot 、 –pidfile 、 –umask 。 すべての優れたデーモン化ツールは同等の機能をサポートする必要があるため、心配する必要はありません。

    また、次の構成キーも削除されました: CELERYD_PID_FILE 、 CELERYBEAT_PID_FILE 、 CELERYMON_PID_FILE 。

  • デフォルトのワーカーログレベルは WARN になり、以前のログレベルを有効にするには、 –loglevel = INFO でワーカーを開始します。

  • タスクは自動的に登録されます。

    これは、タスクを手動で登録する必要がなくなったことを意味します。 タスクが2回登録されているかどうかは関係ないため、古いコードをすぐに変更する必要はありません。

    タスクを自動的に登録したくない場合は、 abstract 属性を設定できます。

    class MyTask(Task):
        abstract = True

    abstract を使用すると、このタスクをサブクラス化するタスクのみが自動的に登録されます(これはDjango ORMのように機能します)。

    サブクラスも登録したくない場合は、 autoregister 属性を False に設定できます。

    ちなみに、この変更により、自動名前割り当てと相対インポートの問題も修正されます。 したがって、相対インポートを使用する場合は、タスク名を指定する必要もありません。

  • 通常の関数をタスクとして使用できなくなりました。

    この変更は、内部がよりクリーンでシンプルになるために追加されました。 ただし、 @task デコレータを使用して、関数をタスクに変換できるようになりました。

    from celery.decorators import task
    
    @task()
    def add(x, y):
        return x + y

    も参照してください

    タスクデコレータの詳細については、タスクを参照してください。

  • 定期的なタスクシステムは、一元化されたソリューションに書き直されました。

    これは、ワーカーがデフォルトで定期的なタスクをスケジュールしなくなったことを意味しますが、新しいデーモン celerybeat が導入されました。

    定期的なタスクスケジューラを起動するには、celerybeatを実行する必要があります。

    $ celerybeat

    これが1つのサーバーでのみ実行されていることを確認してください。これを2回実行すると、すべての定期的なタスクも2回実行されます。

    ワーカーサーバーが1つしかない場合は、次のようにワーカーに埋め込むことができます。

    $ celeryd --beat # Embed celerybeat in celeryd.
  • スーパーバイザーは削除されました。

    これは、 celeryd の -S および –supervised オプションがサポートされなくなったことを意味します。 代わりに http://supervisord.org のようなものを使用してください。

  • TaskSet.join は削除されました。代わりに TaskSetResult.join を使用してください。

  • タスクステータス「DONE」は「SUCCESS」に名前が変更されました。

  • AsyncResult.is_done は削除されました。代わりに、 AsyncResult.successful を使用してください。

  • Task.ignore_result が設定されている場合、ワーカーはエラーを保存しなくなり、以前の動作セット:setting: `CELERY_STORE_ERRORS_EVEN_IF_IGNORED` を True に戻します。

  • イベントを優先して統計機能が削除されたため、 -S および–statistics`スイッチが削除されました。

  • モジュール celery.task.strategy は削除されました。

  • celery.discovery が削除され、autodiscover関数が celery.loaders.djangoapp に追加されました。 理由:内部API。

  • CELERY_LOADER環境変数には、モジュール名に加えてローダークラス名が必要になりました。

    たとえば、以前は“ celery.loaders.default” でしたが、“ celery.loaders.default.Loader” が必要になりました。前の構文を使用すると、[ X172X] DeprecationWarning 。

  • ローダーの検出が遅延するようになったため、 celery.loaders をインポートするときに遅延が発生しません。

    これを実現するために、 celery.loaders.settings は load_settings に名前が変更され、設定オブジェクトを返す関数になりました。 celery.loaders.current_loader も関数になり、現在のローダーを返します。

    そう:

    loader = current_loader

    次のように変更する必要があります。

    loader = current_loader()


非推奨

  • 次の構成変数は名前が変更され、v2.0で非推奨になります。

    • CELERYD_DAEMON_LOG_FORMAT-> CELERYD_LOG_FORMAT

    • CELERYD_DAEMON_LOG_LEVEL-> CELERYD_LOG_LEVEL

    • CELERY_AMQP_CONNECTION_TIMEOUT-> CELERY_BROKER_CONNECTION_TIMEOUT

    • CELERY_AMQP_CONNECTION_RETRY-> CELERY_BROKER_CONNECTION_RETRY

    • CELERY_AMQP_CONNECTION_MAX_RETRIES-> CELERY_BROKER_CONNECTION_MAX_RETRIES

    • SEND_CELERY_TASK_ERROR_EMAILS-> CELERY_SEND_TASK_ERROR_EMAILS


  • celery.confのパブリックAPI名も、一貫した命名スキームに変更されました。

  • 任意の数のキューからの消費をサポートするようになりました。

    これを行うには、構成構文の名前を変更する必要がありました。 カスタムAMQPルーティングオプション(キュー/交換/ルーティングキーなど)のいずれかを使用する場合は、新しいFAQエントリを読む必要があります:一部のサーバーにのみ一部のタスクを送信できますか?

    以前の構文は非推奨であり、v2.0で削除される予定です。

  • TaskSet.run は TaskSet.apply_async に名前が変更されました。

    TaskSet.run は非推奨になり、v2.0で削除される予定です。


ニュース

  • レート制限のサポート(タスクタイプごと、またはグローバル)。

  • 新しい定期的なタスクシステム。

  • 自動登録。

  • 新しいクールなタスクデコレータ構文。

  • ワーカー: -E 引数で有効にすると、イベントを送信するようになりました。

    監視ツールに最適で、すでに作成中です( https://github.com/celery/celerymon )。

    現在のイベントは次のとおりです。:event: `worker-heartbeat` 、task- [received / successed / failed / retried]、:event:` worker-online`:イベント: `worker-offline`

  • すでに適用されているタスクを削除(取り消す)できるようになりました。

  • –hostname 引数を使用して、ワーカーが識別するホスト名を設定できるようになりました。

  • キャッシュバックエンドは、:setting: `CELERY_TASK_RESULT_EXPIRES` 設定を尊重するようになりました。

  • メッセージ形式が標準化され、日時ではなく日付にISO-8601形式が使用されるようになりました。

  • ワーカーは、:sig: `SIGHUP` シグナルに応答して自身を再起動するようになりました。

  • 定期的なタスクが時間どおりにスケジュールされるようになりました。

    つまり、 timedelta(hours = 1)は、サーバーの起動から1時間ごとではなく、00分に1時間ごとを意味します。 以前の動作に戻すには、 PeriodicTask.relative = True を設定できます。

  • 引数のTaskSetsリストへの実行オプションの受け渡しをサポートするようになりました。

    例:

    >>> ts = TaskSet(add, [([2, 2], {}, {'countdown': 1}),
    ...                    ([4, 4], {}, {'countdown': 2}),
    ...                    ([8, 8], {}, {'countdown': 3})])
    >>> ts.run()
  • プリフェッチカウントを同時実行性の4倍に設定することで、パフォーマンスが3倍向上しました(平均タスクラウンドトリップ0.1秒から0.03秒まで!)。

    新しい設定が追加されました::setting: `CELERYD_PREFETCH_MULTIPLIER` 。これはデフォルトで 4 に設定されています。

  • Webhookタスクのサポートが改善されました。

    celery.task.rest は非推奨になり、新しくて光沢のある celery.task.http に置き換えられました。 より反射的な名前、わかりやすいインターフェース、およびHTTPリクエストの実行に使用されるメソッドをオーバーライドすることが可能です。

  • タスクセットの結果は、結果バックエンドに保存することでキャッシュされるようになりました。


変更点

  • :pypi: `carrot` > = 0.8.1に依存するようになりました

  • 新しい依存関係::pypi: `billiard`:pypi:` python-dateutil`:pypi: `django-picklefield`

  • python-daemonに依存しなくなりました

  • uuid ディストリビューションは、Python2.4の実行時に依存関係として追加されます。

  • CELERY_LOADER環境変数に保持することにより、以前に検出されたローダーを記憶するようになりました。

    これは、フォークエミュレーションが使用されているウィンドウで役立つ場合があります。

  • ETAはdatetimeオブジェクトを送信しなくなりましたが、他のプラットフォームとの互換性を高めるために、文字列でISO8601日付形式を使用しています。

  • 再試行されたタスクのエラーメールを送信しなくなりました。

  • タスクは、結果の保存に使用されるバックエンドをオーバーライドできるようになりました。

  • ExecuteWrapperをリファクタリングし、 apply および:setting: `CELERY_ALWAYS_EAGER` は、タスクのコールバックとシグナルも実行するようになりました。

  • ETAを使用するタスクに適切なスケジューラーを使用するようになりました。

    つまり、待機中のETAタスクは時間でソートされるため、リスト全体を常にポーリングする必要はありません。

  • djangoで実行するときに:setting: `CELERY_IMPORTS` にリストされているモジュールもインポートするようになりました(文書化されています)。

  • stdout / stderrのログレベルがINFOからERRORに変更されました

  • ImportErrorsは、タスクを自動検出するときに適切に伝播されるようになりました。

  • これで、 celery.messaging.establish_connection を使用してブローカーへの接続を確立できます。

  • 個別のサービスとして実行している場合、定期的なタスクスケジューラは、定期的にポーリングしないようにいくつかの賢い動きをします。

    より速いポーリング時間が必要な場合は、:setting: `CELERYBEAT_MAX_LOOP_INTERVAL` の値を下げることができます。

  • run_every をプロパティにするか、 PeriodicTask.is_due をサブクラス化することにより、実行時に定期的なタスク間隔を変更できるようになりました。

  • ワーカーは、ブロードキャストキューを使用して有効にする制御コマンドをサポートするようになりました。リモートでタスクを取り消すか、タスクタイプのレート制限を設定できます。 celery.task.controlを参照してください。

  • :pypi: `setproctitle` モジュールがインストールされている場合、サービスは( ps リストに示されているように)有益なプロセス名を設定するようになりました。

  • @NotRegisteredKeyErrorから継承するようになり、 TaskRegistry .__ getitem __ `+` pop は代わりに NotRegistered を発生させます

  • CELERY_LOADER環境変数を介してローダーを設定できます。

  • :setting: `CELERY_IGNORE_RESULT` を設定して、デフォルトでタスクの結果を無視できるようになりました(有効にすると、タスクは使用したバックエンドに結果やエラーを保存しません)。

  • ワーカーは、クラッシュするのではなく、メッセージを破棄して確認することにより、不正な形式のメッセージを正しく処理するようになりました。


バグ

  • タスクの結果をデータベースに保存しているときに発生する可能性があった競合状態を修正しました。


ドキュメンテーション

  • 参照は2つのセクションに分割されました。 APIリファレンスと内部モジュールリファレンス。


0.8.4

発売日
2010-02-05 01:52 pm CEST
リリースバイ
ソレムに聞く
  • –detach引数が使用されている場合に警告を発するようになりました。 –detachは、簡単に修正できないバグがいくつかあるため、使用しないでください。 代わりに、start-stop-daemon、:pypi: `supervisor` または launchd (macOS)のようなものを使用してください。
  • Python> = 2.6を実行している場合でも、ロガークラスがプロセスを認識していることを確認してください。
  • タスクが再試行されても、エラーメールは送信されなくなりました。


0.8.3

発売日
2009-12-22 09:43 am CEST
リリースバイ
ソレムに聞く
  • データベースバックエンドを使用してタスク結果を保存/クエリするときに発生する可能性のある競合状態を修正しました。
  • setup.pyファイルにコンソールスクリプトのエントリポイントがあるため、:pypi: `zc.buildout` などのツールは、プログラムcelerydおよびceleryinitを正しくインストールします。 ]。


0.8.2

発売日
2009-11-20 03:40 pm CEST
リリースバイ
ソレムに聞く
  • QOSプリフェッチカウントは、必要な値が変更されたときにのみ設定されるのではなく、受信したすべてのメッセージに対して設定されたため(明らかに、「もう1つ受信」のように動作します)、適切に適用されませんでした。


0.8.1

発売日
2009-11-16 05:21 pm CEST
リリースバイ
ソレムに聞く

非常に重要な注意

このリリース(ニンジン0.8.0)は、AMQP QoS(サービス品質)を有効にします。つまり、ワーカーは一度に処理できる数のメッセージのみを受信します。 他のリリースと同様に、本番環境にロールアウトする前に、開発サーバーでこのバージョンのアップグレードをテストする必要があります。


重要な変更

  • Python <2.6を使用していて、マルチプロセッシングバックポートを使用している場合は、マルチプロセッシングバージョン2.6.2.1が必要です。

  • すべてのAMQP_ *設定の名前がBROKER_ *に変更され、さらにAMQP_SERVERの名前がBROKER_HOSTに変更されたため、以前は次のようになりました。

    AMQP_SERVER = 'localhost'
    AMQP_PORT = 5678
    AMQP_USER = 'myuser'
    AMQP_PASSWORD = 'mypassword'
    AMQP_VHOST = 'celery'

    これを次のように変更する必要があります。

    BROKER_HOST = 'localhost'
    BROKER_PORT = 5678
    BROKER_USER = 'myuser'
    BROKER_PASSWORD = 'mypassword'
    BROKER_VHOST = 'celery'
  • カスタムニンジンバックエンドには、バックエンドクラス名を含める必要があるため、以前は次のようになりました。

    CARROT_BACKEND = 'mycustom.backend.module'

    次のように変更する必要があります。

    CARROT_BACKEND = 'mycustom.backend.module.Backend'

    ここで、 Backend はクラス名です。 これはおそらく「バックエンド」であり、以前は暗黙の名前でした。

  • ニンジンの新しいバージョン要件:0.8.0


変更点

  • processName エラーを修正するマルチプロセッシングバックポートパッチが組み込まれています。
  • デフォルトでは、PeriodicTaskの結果は無視されます。
  • Redis結果ストアバックエンドを追加しました
  • /etc/default/celerydceleryd init-scriptの追加オプションを定義できるようにします。
  • UTCとは異なる時間を使用すると、MongoDBの定期的なタスクが発生する問題が修正されました。
  • Windows固有:利用可能なos.forkのテストを無効にします(:github_user: `miracle2k` に感謝します)。
  • 壊れたPIDファイルを処理しようとしました。
  • データベースバックエンドでテストするために CELERY_ALWAYS_EAGER = True を設定するDjangoテストランナーをcontribに追加しました。
  • Django-グローバルキャッシュバックエンド以外のものを使用するための:setting: `CELERY_CACHE_BACKEND` 設定を追加しました。
  • Python 2.4をサポートするためにfunctools.partialのカスタム実装を使用します(おそらく2.4での実行にはまだ問題がありますが、最終的にはサポートされる予定です)
  • すべてのバックエンドの:state: `RETRY` ステータスを保存するときに、pickle化する例外を準備します。
  • SQLiteの同時実行制限は、データベースバックエンドが使用されている場合にのみ有効です。


0.8.0

発売日
2009-09-22 03:06 pm CEST
リリースバイ
ソレムに聞く

後方互換性のない変更

  • 失敗した場合の結果値にトレースバックを追加します。

    ノート

    データベースバックエンドを使用する場合は、データベーステーブル celery_taskmeta を再作成する必要があります。

    これを行うには、メーリングリストまたは IRC チャネルに連絡してください。

  • データベーステーブルは、データベースバックエンドが使用されている場合にのみ作成されるようになったため、ある時点でデータベースバックエンドに戻す場合は、必ずテーブルを初期化してください(django: syncdb 、python: celeryinit [X208X ])。

    ノート

    これは、Djangoバージョン1.1以降を使用している場合にのみ適用されます。

  • 現在、 carrot バージョン0.6.0に依存しています。

  • 現在、python-daemon1.4.8に依存しています


重要な変更

  • Celeryは、純粋なPython(Djangoプロジェクト以外)で使用できるようになりました。

    これは、CeleryがDjango固有ではなくなったことを意味します。

    詳細については、FAQエントリ Celery for Djangoのみですか?を参照してください。

  • Celeryはタスクの再試行をサポートするようになりました。

    詳細については、再試行を参照してください。

  • これで、AMQP結果ストアバックエンドができました。

    メッセージを使用して、タスクの戻り値とステータスを公開します。 そして、それは信じられないほど速いです!

    詳細については、問題#6を参照してください。

  • 実装されたAMQPQoS(プリフェッチカウント):

    これは、処理できる以上のメッセージを受信しないようにするためです。

  • デタッチ時にstdout / stderrをワーカーログファイルにリダイレクトするようになりました

  • inspect.getargspec を使用して、デフォルトの引数のみを渡すようになりました

    タスクはサポートします。

  • Task.on_success、.on_retry、.on_failureハンドラーを追加します
    celery.task.base.Task.on_success()を参照してください、

    celery.task.base.Task.on_retry()celery.task.base.Task.on_failure()

  • celery.utils.gen_unique_id :の回避策

    http://bugs.python.org/issue4607

  • ワーカーの開始時、プロセスの初期化時などに何が起こるかをカスタマイズできるようになりました。

    独自のローダーを作成する(celery.loaders.defaultcelery.loaders.djangoappcelery.loadersを参照)。

  • 複数のAMQP交換とキューのサポート。

    この機能にはドキュメントとテストがないため、興味のある人はこの状況を改善することをお勧めします。

  • これで、ワーカーはAMQPサーバーの再起動後も存続します。

    AMQPブローカー接続が失われた場合、自動的に再確立します。

    新しい設定:

    • AMQP_CONNECTION_RETRY

      接続の再試行を有効にするには、 True に設定します。

    • AMQP_CONNECTION_MAX_RETRIES。

      諦めるまでの最大再起動回数。 デフォルト: 100 。



ニュース

  • *; python-daemonとマルチプロセッシングの間の非互換性を修正します。
    その結果、デタッチ時に [Errno10]子プロセスなしの問題が発生しました。
  • *; ピクルスを保存するときに発生する可能性があったDjangoUnicodeDecodeErrorを修正しました
    DjangoのMemcachedキャッシュバックエンドへのデータ。
  • より良いWindows互換性。
  • *; 漬物畑の新バージョン(
    http://www.djangosnippets.org/snippets/513/
  • *; 導入された新しいシグナル: task_sent 、 task_prerun 、および
    task_postrun 。詳細については、celery.signalsを参照してください。
  • *; TaskSetResult.join は、 timeout = None の場合、 TypeError を引き起こしました。
    JerzyKozeraに感謝します。 #31を閉じる
  • *; views.apply は HttpResponse インスタンスを返す必要があります。
    JerzyKozeraに感謝します。 #32を閉じます
  • *; PeriodicTask : int からの run_every の変換を保存します
    インスタンスではなく、クラス属性への timedelta へ。
  • *; 例外は celery.exceptions に移動されましたが、引き続き
    前のモジュールで利用できます。
  • *; エラーが発生した場合は、トランザクションをロールバックして結果の保存を再試行してください
    データベースバックエンドでタスクステータスを設定している間。
  • jail()はcelery.execute.ExecuteWrapperにリファクタリングされました。
  • views.apply がmime-typeを「application / json」に正しく設定するようになりました
  • views.task_status は、状態が:state: `RETRY` の場合に例外を返すようになりました。
  • *; views.task_status は、状態が:state: `FAILURE` の場合、トレースバックを返すようになりました。
    または:state: `RETRY`
  • 文書化されたデフォルトのタスク引数。
  • デバッグを容易にするために、適切な__repr__をExceptionInfoに追加します
  • *; ドキュメントのタイプミスを修正 .. マップのインポート -> .. dmapをインポートする 。
    :github_user: `mikedizon` に感謝します。


0.6.0

発売日
2009-08-07 06:54 am CET
リリースバイ
ソレムに聞く

重要な変更

  • *; ピクルできない例外を発生させるタスクがプールをクラッシュさせるバグを修正しました
    労働者。 そのため、プールワーカーが不思議なことに姿を消したり、ワーカーが動作を停止したりする問題が発生した場合、これはこのバージョンで修正されています。
  • 定期的なタスクでの競合状態を修正しました。
  • *; タスクプールが監視されるようになったため、プールワーカーがクラッシュした場合、
    消えるか応答を停止すると、自動的に新しいものに置き換えられます。
  • Task.nameは、クラスmodule + nameから自動的に生成されるようになりました(例:“ djangotwitter.tasks.UpdateStatusesTask” )。 とても便利。 以前にこれを行わなかった理由はわかりません。 一部のドキュメントは、タスク名を手動で指定しないように更新されています。


ニュース

  • Django1.1でテスト済み
  • 新しいチュートリアル:キャロットとセロリを使用してクリックカウンターを作成する
  • *; 定期的なタスクのデータベースエントリがワーカーで作成されるようになりました
    各チェックの代わりに起動(長い間コードでTODO / XXXを忘れていました)
  • *; 新しい設定変数::setting: `CELERY_TASK_RESULT_EXPIRES`
    保存されたタスクの結果が削除された後の時間(秒単位、または datetime.timedelta オブジェクト)。 現時点では、これはデータベースバックエンドでのみ機能します。
  • *; ワーカーは、定期的なタスクのデバッグログメッセージを出力するようになりました。
    発売されました。
  • *; 定期的なタスクテーブルは、取得中に読み取るためにロックされるようになりました
    定期的なタスクステータス(これまでのところMySQLのみ、他のエンジンのパッチを探しています)
  • *; オンにすることで、より多くのデバッグ情報を利用できるようになりました。
    DEBUG ログレベル( –loglevel = DEBUG )。
  • タイムアウト引数を持つ関数/メソッドが正しく機能するようになりました。
  • *; 新規: celery.strategy.even_time_distribution :
    タスク引数、kwargsタプルを生成するイテレータを使用して、使用可能な時間枠全体にタスクの処理を均等に分散します。
  • ログメッセージ不明なタスクは無視されました…のログレベルはエラーになりました
  • *; タスクが受信されたときのログメッセージは、たとえ
    タスクにはETA(到着予定時刻)があります。 また、ログメッセージにタスクのETA(存在する場合)が含まれるようになりました。
  • *; 確認応答がプールコールバックで発生するようになりました。 仕事でackをすることはできません
    ピクルスできない(AMQP接続を共有できないなど)ため、ターゲット。
  • READMEにぶら下がっている.delayに関するメモを追加しました
  • Django1.1でテストに合格しました
  • アプリがINSTALLED_APPSにあることを確認するための検出を修正しました
  • *; 以前にオーバーライドされたプールの動作(プロセスの刈り取り、プールワーカーまで待つ
    利用可能など)は、 multiprocessing.Pool 自体によって処理されるようになりました。
  • kwargsとして使用するために統計データをUnicodeに変換します。 ありがとうルーシー!


0.4.1

発売日
2009-07-02 01:42 pm CET
リリースバイ
ソレムに聞く
  • メッセージオプションの解析に関するバグを修正しました(必須、ルーティングキー、優先度、即時)


0.4.0

発売日
2009-07-01 07:29 pm CET
リリースバイ
ソレムに聞く
  • 熱心な実行を追加します。 celery.execute.apply` | `Task.apply は、タスクが完了するまで関数ブロッキングを実行します。APIの互換性のために、 celery.result.EagerResult インスタンスを返します。 :setting: `CELERY_ALWAYS_EAGER` 設定を True に設定することで、常にローカルでタスクを実行するようにCeleryを構成できます。
  • 現在、 anyjson に依存しています。
  • Python カバレッジ 3.0を使用した99 % c超過。


0.3.20

発売日
2009-06-25 08:42 pm CET
リリースバイ
ソレムに聞く
  • apply_async ( delay_task の高度なバージョン)、 countdown 、および eta への新しい引数。

    >>> # Run 10 seconds into the future.
    >>> res = apply_async(MyTask, countdown=10);
    >>> # Run 1 day from now
    >>> res = apply_async(MyTask,
    ...                   eta=datetime.now() + timedelta(days=1))
  • 古いPIDファイルのリンクを解除するようになりました

  • もっとたくさんのテスト。

  • ニンジン> = 0.5.0と互換性があります。

  • 重要 TaskSetResult インスタンスの subtask_ids 属性が削除されました。 代わりにこの情報を取得するには、次を使用します。

    >>> subtask_ids = [subtask.id for subtask in ts_res.subtasks]
  • Taskset.run()は、タスククラスからの追加のメッセージオプションを尊重するようになりました。

  • タスク:属性 ignore_result を追加します:ステータスと戻り値を保存しません。 つまり、 celery.result.AsyncResult を使用して、タスクが完了したかどうかを確認したり、その戻り値を取得したりすることはできません。 パフォーマンスが必要で、これらの機能がなくてもライブで使用できる場合にのみ使用してください。 発生した例外は、通常どおり戻り値/ステータスを保存します。

  • タスク:属性 disable_error_emails を追加して、そのタスクのエラーメールの送信を無効にします。

  • これでWindowsで動作するはずです(ただし、バックグラウンドでの実行は動作しないため、 –detach 引数を使用すると、例外が発生します)。

  • プロファイリングとモニタリングの統計のサポートが追加されました。 統計の送信を開始するには、ワーカーを –統計オプション。 その後、しばらくすると、 `python manage.pycelerystatsを実行して結果をダンプできます。 。 詳細については、 celery.monitoring を参照してください。

  • Celeryデーモンを監視できるようになりました(つまり、クラッシュした場合は自動的に再起動されます)。 これを使用するには、–supervised`オプション(または -S )を使用してワーカーを起動します。

  • views.apply:タスクの呼び出しを表示します。

    例:

    http://e.com/celery/apply/task_name/arg1/arg2//?kwarg1=a&kwarg2=b

    警告

    注意して使用してください! コードが安全であることを最初に確認せずに、このURLを公開しないでください。

  • celery.task をリファクタリングしました。 現在、3つのモジュールに分割されています。

    • celery.task

      apply_async 、 delay_task 、 discard_all 、およびタスクショートカットが含まれ、 celery.task.base および celeryからオブジェクトがインポートされます。 task.builtins

    • celery.task.base

      タスク基本クラスが含まれています: Task 、 PeriodicTask 、 TaskSet 、 AsynchronousMapTask 、 ExecuteRemoteTask 。

    • celery.task.builtins

      組み込みタスク: PingTask 、 DeleteExpiredTaskMetaTask 。



0.3.7

発売日
2008-06-16 11:41 pm CET
リリースバイ
ソレムに聞く
  • 重要 basic.get の代わりにAMQPの basic.consume を使用するようになりました。 これは、新しいメッセージについてブローカーをポーリングしなくなったことを意味します。

  • 重要デフォルトの同時実行制限が、システムで使用可能なCPUの数に設定されるようになりました。

  • 重要 tasks.register: Renamed task_name argument to 名前, so:

    >>> tasks.register(func, task_name='mytask')

    次のように置き換える必要があります。

    >>> tasks.register(func, name='mytask')
  • pidfileが古くなった場合でも、デーモンが正しく実行されるようになりました。

  • ニンジン0.4.5と互換性があります

  • デフォルトのAMQP接続タイムアウトは4秒になりました。

  • AsyncResult.read()は常に True を返していました。

  • easy_installが壊れないようにファイルが存在する場合にのみ、READMEをlong_descriptionとして使用してください。

  • celery.view :JSON応答でmimeタイプが正しく設定されるようになりました。

  • apply_async に connection キーワード引数が追加されたため、複数のタスクを実行する場合に同じAMQP接続を再利用できます。

  • 500をスローしないように、task_statusビューで失敗を処理します。

  • ドキュメントのタイプミス AMQP_SERVER を AMQP_HOST に修正しました。

  • 管理者に送信されるワーカー例外メールが正しく機能するようになりました。

  • django に依存しなくなったため、 celery をインストールしても、インストールされている優先Djangoバージョンには影響しません。

  • PickledObject フィールドを登録することにより、PostgreSQL(:pypi: `psycopg2` )で再び動作するようになりました。

  • ワーカー: –detach オプションを –daemon のエイリアスとして追加しました。これは、今後ドキュメントで使用される用語です。

  • プールと定期的なタスクワーカースレッドが終了時に適切に終了していることを確認します( Control-c が再び機能するようにします)。

  • 現在、 python-daemon に依存しています。

  • simplejson への依存関係を削除しました

  • キャッシュバックエンド:Djangoキャッシュバックエンドが:pypi: `python-memcached` / :pypi:` libmemcached` の場合、すべてのタスクプロセスの接続を再確立します。

  • Tyrant Backend:実行されたすべてのタスクの接続を再確立するようになりました。


0.3.3

発売日
2009-06-08 01:07 pm CET
リリースバイ
ソレムに聞く
  • PeriodicWorkController は、実行する定期的なタスクをチェックする間、1秒間スリープするようになりました。


0.3.2

発売日
2009-06-08 01:07 pm CET
リリースバイ
ソレムに聞く
  • ワーカー:オプション –discard を追加しました:キュー内のすべての待機中のメッセージを破棄(削除!)します。
  • ワーカー: –wakeup-after オプションはフロートとして処理されませんでした。


0.3.1

発売日
2009-06-08 01:07 pm CET
リリースバイ
ソレムに聞く
  • PeriodicTask ワーカーは、 TaskController ループをブロックする代わりに、独自のスレッドで実行されるようになりました。
  • デフォルトの QUEUE_WAKEUP_AFTER は 0.1 に下げられました(以前は 0.3 でした)


0.3.0

発売日
2009-06-08 12:41 pm CET
リリースバイ
ソレムに聞く

警告

これは開発バージョンです。安定リリースについては、バージョン0.2.xを参照してください。


非常に重要: Pickleは、タスク引数のシリアル化に使用されるエンコーダーになりました。アップグレードする前に、必ずタスクキューをフラッシュしてください。

  • IMPORTANT TaskSet.run()はcelery.result.TaskSetResultインスタンスを返すようになりました。これにより、タスクセットが単一のエンティティであるため、ステータスを検査して値を返すことができます。

  • 重要セロリはニンジン> = 0.4.1に依存するようになりました。

  • Celeryデーモンは、登録された管理者の電子メールにタスクエラーを送信するようになりました。 この機能をオフにするには、 settings.py で SEND_CELERY_TASK_ERROR_EMAILS を False に設定します。 GrégoireCachetに感謝します。

  • manage.py を使用して、Celeryデーモンを実行できるようになりました。

    $ python manage.py celeryd

    GrégoireCachetに感謝します。

  • メッセージの優先順位、トピック交換、タスクのカスタムルーティングキーのサポートが追加されました。 これは、タスクを実行する新しい方法である celery.task.apply_async を導入したことを意味します。

    通常どおり celery.task.delay と celery.Task.delay を使用できますが、送信するメッセージをより細かく制御する場合は、 celery.task.apply_asyncが必要です。 および celery.Task.apply_async 。

    これは、AMQP構成が変更されたことも意味します。 一部の設定は名前が変更されましたが、他の設定は新しいものです。

    • CELERY_AMQP_EXCHANGE

    • CELERY_AMQP_PUBLISHER_ROUTING_KEY

    • CELERY_AMQP_CONSUMER_ROUTING_KEY

    • CELERY_AMQP_CONSUMER_QUEUE

    • CELERY_AMQP_EXCHANGE_TYPE


    詳細については、 FAQ のエントリ一部のタスクを一部のサーバーにのみ送信できますか?を参照してください。

  • タスクエラーは、 INFO ではなくログレベル ERROR を使用してログに記録されるようになり、スタックトレースがダンプされます。 GrégoireCachetに感謝します。

  • すべての新しいワーカープロセスにDjangoDB接続を再確立させます。これにより、「MySQL接続が切断されましたか?」 例外。 VitalyBabiyとJirkaVejrazkaに感謝します。

  • 重要 pickleを使用してタスク引数をエンコードするようになりました。 これは、複雑なPythonオブジェクトを引数としてタスクに渡すことができることを意味します。

  • yadayada への依存関係を削除しました。

  • FAQを追加しました。 docs / faq.rst を参照してください。

  • タスク kwargs のUnicodeキーを通常の文字列に変換するようになりました。 VitalyBabiyに感謝します。

  • TaskDaemon の名前を WorkController に変更しました。

  • celery.datastructures.TaskProcessQueue の名前が celery.pool.TaskPool に変更されました。

  • プールアルゴリズムは、パフォーマンスと安定性を高めるためにリファクタリングされています。


0.2.0

発売日
2009-05-20 05:14 pm CET
リリースバイ
ソレムに聞く
  • 0.2.0の最終リリース
  • ニンジンバージョン0.4.0と互換性があります。
  • データベースバックエンドからの結果のフェッチに関連するいくつかの構文エラーを修正します。


0.2.0-pre3

発売日
2009-05-20 05:14 pm CET
リリースバイ
ソレムに聞く
  • 内部リリース。 選択できない例外の処理が改善され、 get_result は、元の例外のように見えるものを再作成しようとするようになりました。


0.2.0-pre2

発売日
2009-05-20 01:56 pm CET
リリースバイ
ソレムに聞く
  • ピクルスできない例外( django.core.exception.MultipleObjectsReturned の動的に生成されたサブクラスなど)を処理するようになりました。


0.2.0-pre1

発売日
2009-05-20 12:33 pm CET
リリースバイ
ソレムに聞く
  • 多くの新機能を備えて非常に安定しているので、バージョンを0.2に上げます。 これはプレリリースです。
  • celery.task.mark_as_read()および celery.task.mark_as_failure()は削除されました。 代わりに、 celery.backends.default_backend.mark_as_read()、および celery.backends.default_backend.mark_as_failure()を使用してください。


0.1.15

発売日
2009-05-19 04:13 pm CET
リリースバイ
ソレムに聞く
  • CeleryデーモンがAMQP接続をリークしていました。これを修正する必要があります。開いているファイルが多すぎるという問題がある場合( rabbit.log の emfile エラーなど)、お問い合わせください。


0.1.14

発売日
2009-05-19 01:08 pm CET
リリースバイ
ソレムに聞く
  • TaskSet クラスの構文エラーを修正しました(そのような変数 TimeOutError はありません)。


0.1.13

発売日
2009-05-19 12:36 pm CET
リリースバイ
ソレムに聞く
  • 要件をインストールするために yadayada を追加するのを忘れました。

  • 完了としてマークされた結果だけでなく、期限切れのタスク結果をすべて削除するようになりました。

  • djangoを設定せずにTokyoTyrantバックエンドクラスをロードでき、クラスコンストラクターで直接tyrant設定を指定できます。

  • 改善されたAPIドキュメント

  • Sphinxドキュメントシステムを使用して、次の手順でhtmlドキュメントを作成できます。

    $ cd docs
    $ make html

    結果は docs / _build / html になります。


0.1.12

発売日
2009-05-18 04:38 pm CET
リリースバイ
ソレムに聞く
  • delay_task()など。 celery.task.AsyncResult オブジェクトを返すようになりました。これにより、結果と発生した可能性のある障害を確認できます。 これは、 multiprocessing.Pool.map_async によって返される multiprocessing.AsyncResult クラスのように機能します。

  • dmap()dmap_async()を追加しました。 これは、 multiprocessing.Pool バージョンと同じように機能しますが、Celeryサーバーに分散されるタスクである点が異なります。 例:

    >>> from celery.task import dmap
    >>> import operator
    >>> dmap(operator.add, [[2, 2], [4, 4], [8, 8]])
    >>> [4, 8, 16]
    
    >>> from celery.task import dmap_async
    >>> import operator
    >>> result = dmap_async(operator.add, [[2, 2], [4, 4], [8, 8]])
    >>> result.ready()
    False
    >>> time.sleep(1)
    >>> result.ready()
    True
    >>> result.result
    [4, 8, 16]
  • タスクのメタデータキャッシュとデータベースバックエンドをリファクタリングし、TokyoTyrantの新しいバックエンドを追加しました。 django設定ファイルでバックエンドを設定できます。

    例:

    CELERY_RESULT_BACKEND = 'database'; # Uses the database
    CELERY_RESULT_BACKEND = 'cache'; # Uses the django cache framework
    CELERY_RESULT_BACKEND = 'tyrant'; # Uses Tokyo Tyrant
    TT_HOST = 'localhost'; # Hostname for the Tokyo Tyrant server.
    TT_PORT = 6657; # Port of the Tokyo Tyrant server.


0.1.11

発売日
2009-05-12 02:08 pm CET
リリースバイ
ソレムに聞く
  • ロギングシステムがファイル記述子をリークしていたため、サーバーがEMFILES(開いているファイルが多すぎます)エラー(修正済み)で停止していました。


0.1.10

発売日
2009-05-11 12:46 pm CET
リリースバイ
ソレムに聞く
  • タスクは、位置引数とキーワード引数の両方をサポートするようになりました。
  • ニンジン0.3.8が必要です。
  • 接続が失われた場合、デーモンは再接続を試みるようになりました。


0.1.8

発売日
2009-05-07 12:27 pm CET
リリースバイ
ソレムに聞く
  • より良いテストカバレッジ
  • その他のドキュメント
  • settings.CELERYD_EMPTY_MSG_EMIT_EVERY が0の場合、ワーカーは Queue is empty メッセージを出力しません。


0.1.7

発売日
2009-04-30 01:50 pm CET
リリースバイ
ソレムに聞く
  • いくつかのユニットテストを追加しました
  • タスクのメタデータにデータベースを使用できるようになりました(タスクが実行されたかどうかなど)。 settings.CELERY_TASK_META を設定します
  • python setup.py test を実行して、 tests プロジェクト内から単体テストを実行できるようになりました。
  • settings.CELERY_AMQP_EXCHANGE 、 settings.CELERY_AMQP_ROUTING_KEY 、および settings.CELERY_AMQP_CONSUMER_QUEUE を使用して、AMQP交換/ルーティングキー/キューを設定できます。


0.1.6

発売日
2009-04-28 02:13 pm CET
リリースバイ
ソレムに聞く
  • TaskSet のご紹介。 一連のサブタスクが実行され、実行されたサブタスクの数、またはすべてが実行された場合はそれを確認できます(プログレスバーなどに最適)

  • Task .__ call __ の実行時にすべての例外をキャッチするようになったため、デーモンが停止しません。 これは純粋関数ではまだ発生せず、 Task クラスでのみ発生します。

  • autodiscover()がzip形式の卵で機能するようになりました。

  • ワーカー:便宜上、現在の作業ディレクトリを sys.path に追加するようになりました。

  • PeriodicTask クラスの run_every 属性を、 datetime.timedelta()オブジェクトにできるようになりました。

  • ワーカー:ワーカーの DJANGO_PROJECT_DIR 変数を設定できるようになりました。これにより、 sys.path に追加され、簡単に起動できるようになります。

  • タスクがHTTP経由で実行されたかどうかを確認できるようになりました。

  • これを行うには、Celery urls.py をプロジェクトに含めます。

    >>> url(r'^celery/$', include('celery.urls'))

    次に、次のURLにアクセスします。

    http://mysite/celery/$task_id/done/

    これにより、次のようなJSONディクショナリが返されます。

    {"task": {"id": "TASK_ID", "executed": true}}
  • delay_task は、 uuid.UUID インスタンスではなく、文字列IDを返すようになりました。

  • PeriodicTasks が追加され、 cron のような機能が追加されました。

  • プロジェクトの名前が crunchy から celery に変更されました。 名前変更リクエストの詳細は、 docs / name_change_request.txt にあります。


0.1.0

発売日
2009-04-24 11:28 am CET
リリースバイ
ソレムに聞く
  • 初回リリース

Sphinxは_staticから画像を削除することで吸い始めたので、画像が含まれていることを確認するために、ここで実際のコンテンツに画像を追加する必要があります:-(

../_images/celery-banner.png ../_images/celery-banner-small.png