web-dev-qa-db-ja.com

セロリのbind = Trueキーワードの意味は何ですか?

以下のbind=Trueの意味は何ですかceleryコード?それをいつ使用し、いつ使用しないのですか?

@app.task(bind=True)
def send_Twitter_status(self, oauth, Tweet):
    try:
        Twitter = Twitter(oauth)
        Twitter.update_status(Tweet)
    except (Twitter.FailWhaleError, Twitter.LoginError) as exc:
        raise self.retry(exc=exc)
17
Devang Padhiyar

他の回答へのほんの少しの追加。すでに述べたように、 bound tasks はタスクインスタンスにアクセスできます。これが必要な場合の1つの使用例は、再試行です。

@celery.task(bind=True, max_retries=5)
def retrying(self):
    try:
        return 1/0
    except Exception:
        self.retry(countdown=5)

別の使用例は、タスクに カスタム状態 を定義し、タスクの実行中に設定できるようにする場合です。

@celery.task(bind=True)
def show_progress(self, n):
    for i in range(n):
        self.update_state(state='PROGRESS', meta={'current': i, 'total': n})
20
Tomáš Linhart

Bind引数は、関数が「バインドされたメソッド」になるため、タスクタイプのインスタンスの属性とメソッドにアクセスできることを意味します。

docs を参照してください

7

バインドされたタスク

バインドされているタスクとは、Pythonバインドメソッドと同様に、タスクの最初の引数が常にタスクインスタンス(自己)であることを意味します。

logger = get_task_logger(__name__)

@task(bind=True)
def add(self, x, y):
    logger.info(self.request.id)
5
Devang Padhiyar