60

Celeryを使用して非同期タスクを管理しています。ただし、場合によっては、セロリ プロセスがダウンして、タスクがまったく実行されないことがあります。セロリのステータスをチェックして、すべてが正常に機能していることを確認し、問題が検出された場合はユーザーにエラー メッセージを表示できるようにしたいと考えています。Celery Workerのドキュメントから、これにはpingまたはinspectを使用できるように見えますが、pingはハッキリしていて、inspectの使用方法が正確にはわかりません(inspect()。registered()が空の場合)。

これに関するガイダンスをいただければ幸いです。基本的に私が探しているのは、次のような方法です。

def celery_is_alive():
    from celery.task.control import inspect
    return bool(inspect().registered()) # is this right??

EDIT:セロリ2.3.3でregistered()が利用できるようには見えません(2.1のドキュメントにはリストされていますが)。おそらくpingが正しい答えです。

編集:Pingも、私が思っていたことをしていないように見えるので、ここでの答えはまだわかりません.

4

9 に答える 9

64

これが私が使用しているコードです。 celery.task.control.Inspect.stats()現在使用可能なワーカーに関する多くの詳細を含む dict を返します。実行中のワーカーがない場合は None を返し、IOErrorメッセージ ブローカーに接続できない場合は を発生させます。私は RabbitMQ を使用しています。他のメッセージング システムでは動作が若干異なる可能性があります。これは、Celery 2.3.x および 2.4.x で機能しました。どこまでさかのぼるかはわかりません。

def get_celery_worker_status():
    ERROR_KEY = "ERROR"
    try:
        from celery.task.control import inspect
        insp = inspect()
        d = insp.stats()
        if not d:
            d = { ERROR_KEY: 'No running Celery workers were found.' }
    except IOError as e:
        from errno import errorcode
        msg = "Error connecting to the backend: " + str(e)
        if len(e.args) > 0 and errorcode.get(e.args[0]) == 'ECONNREFUSED':
            msg += ' Check that the RabbitMQ server is running.'
        d = { ERROR_KEY: msg }
    except ImportError as e:
        d = { ERROR_KEY: str(e)}
    return d
于 2011-12-15T15:28:29.343 に答える
5

以下は私のために働いた:

import socket
from kombu import Connection

celery_broker_url = "amqp://localhost"

try:
    conn = Connection(celery_broker_url)
    conn.ensure_connection(max_retries=3)
except socket.error:
    raise RuntimeError("Failed to connect to RabbitMQ instance at {}".format(celery_broker_url))
于 2016-03-15T01:26:22.687 に答える
0

メソッドを使用pingして、任意のワーカー (または特定のワーカー) が生きているかどうかを確認でき
ます https://docs.celeryproject.org/en/latest/_modules/celery/app/control.html#Control.ping

celey_app.control.ping()

于 2019-10-01T19:17:15.447 に答える