2

与えられたファイルmyapp.py

from celery import Celery
celery = Celery("myapp")
celery.config_from_object("celeryconfig")

@celery.task(default_retry_delay=5 * 60, max_retries=12)
def add(a, b):
      with open("try.txt", "a") as f:
            f.write("A trial = {}!\n".format(a + b))
      raise add.retry([a, b])

で構成celeryconfig.py

CELERY_IMPORTS = ["myapp"]
BROKER_URL = "amqp://"
CELERY_RESULT_BACKEND = "amqp"

両方のファイルがあるディレクトリを呼び出します。

$ celeryd -E

その後

$ python -c "import myapp; myapp.add.delay(2, 5)"

また

$ celery call myapp.add --args="[2, 5]"

だから、try.txtで作成されます

A trial = 7!

1回だけ。つまり、再試行は無視されました。

私は他にも多くのことを試しました:

  • MongoDB をブローカーおよびバックエンドとして使用し、データベースを検査します (奇妙なことに、「カウントダウン」スケジュールされたジョブであっても、ブローカーの「メッセージ」コレクションには何も表示されません)
  • ここの PING の例、RabbitMQ と MongoDB の両方を使用
  • ( PINGprintの例のように) とlogging
  • 強制が発生した後、except ブロックで再試行呼び出しをException行い、retry() を発生または返し、「throw」パラメーターをTrue/ False/指定なしに変更します。
  • 何が起こっているかを確認するcelery flower(「ブローカー」リンクには何も表示されない)

しかし、どれも機能しませんでした =/

私のcelery report出力:

software -> celery:3.0.19 (Chiastic Slide) kombu:2.5.10 py:2.7.3
            billiard:2.7.3.28 py-amqp:N/A
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.default.Loader
settings -> transport:amqp results:amqp

以上、何かおかしくないですか?retry() メソッドを機能させるにはどうすればよいですか?

4

0 に答える 0