1

セロリの労働者を頻繁に吊るすように見える特定の仕事が1つあります。ブローカーとしてrabbitmqを使用しています。これを修正するためにいくつかのことを試しましたが、役に立ちませんでした:

  • ワーカーを自動スケーリングして、ハングしたワーカーが実行を完了するのに十分な時間を確保する
  • グローバル タイムアウトの設定

そのため、この問題の原因とそれを修正する方法について少し説明しました。誰でも私に何か指針を与えることができますか?問題のタスクは、データベース (この場合は MongoDB) にレコードを挿入するだけです。

更新: CELERYD_FORCE_EXECVを追加しました。これで問題が解決するかどうかを確認します。更新 2: いいえ!

4

2 に答える 2

1

子プロセスをハングさせる特定のジョブは、多くの場合、完了しない IO の症状です。たとえば、Web リクエストやタイムアウトなしのソケット読み取りなどです。

ほとんどのライブラリはタイムアウトの設定をサポートしていますが、そうでない場合はいつでも使用できますsocket.setdefaulttimeout:

import socket

@task
def http_get(url, timeout=1.0, retry_after=3.0, max_retries=None):
    prev_timeout = socket.getdefaulttimeout()
    socket.setdefaulttimeout(timeout)
    try:
        return requests.get(url)
    except socket.timeout:
        raise http_get.retry(exc=exc, countdown=retry_after, max_retries=max_retries)
    finally:
        socket.setdefaulttimeout(prev_timeout)
于 2012-09-16T20:59:03.650 に答える