2017-11-27 2 views
0

セロリのタスクの設定時間制限が有効であることを確認したいと思います。セロリのタスクがタイムアウトしない

私は現在、このように見ている私の設定を持っている:

CELERYD_TASK_SOFT_TIME_LIMIT = 30 
CELERYD_TASK_TIME_LIMIT = 120 

task_soft_time_limit = 29 
task_time_limit = 44_LIMIT = 120 

そこname change comingと私はちょうど私が少なくとも一つのタイムアウトを打つことを確認したいことが表示されますので、私はタイムアウトパラメータをオーバーロードしています。

しかし、私は、デバッガでテストを実行するとcellery app.conf辞書は次のようになります。私はタイムアウトをトリガーと信じてテストを書きましたが、エラーがこれまで提起されていない

(Pdb) app.conf['task_time_limit'] == None 
True 
(Pdb) app.conf['task_soft_time_limit'] == None 
True 
(Pdb) app.conf['CELERYD_TASK_SOFT_TIME_LIMIT'] 
30 
(Pdb) app.conf['CELERYD_TASK_TIME_LIMIT'] 
120 

@app.task(soft_time_limit=15) 
def time_out_task(): 
    import time 
    count = 0 
    #import pdb; pdb.set_trace() 
    while count < 1000: 
     time.sleep(1) 
     count += 1 
     print(count) 

次のように私の質問は以下のとおりです。

  1. 私はshoul円錐形の設定はどのようなものをdは柔らかくて苦しい時間制限に設定されていますか?
  2. 時間制限があることを私に証明するテストでタスクを実行するにはどうすればいいですか?

おかげ

答えて

0

私は私がテストしていた方法を変更することにより、私はセロリの設定をインポートした方法を変更することにより、問題を解決しました。

当初、私はDjangoの設定をインポートすることによってオブジェクトの構成を設定しました:

app = Celery('groot') 
app.config_from_object('django.conf:settings', namespace='CELERY') 

しかし、これはCELERYD_...プレフィックスで設定を無視しました。したがって、私は新しい表記法を使用して、次のメソッドが呼び出さ:

app.conf.update(
    task_soft_time_limit=30, 
    task_time_limit=120, 
) 

を私はまた、実際のセロリの労働者をスピンアップし、作業者にタスクを送信するDjangoのテスト環境でこれをテストするから変更しました。 単体テストでタイムアウト設定をテストする方法の解決策を提供する人がいたら、それは大いに感謝しています。

関連する問題