芹菜中bind = True关键字是什么意思?

时间:2019-02-27 06:27:21

标签: python django celery

芹菜代码下面的bind=True是什么意思?什么时候使用它,什么时候不使用?

@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)

3 个答案:

答案 0 :(得分:6)

  

bind参数表示该函数将是“绑定方法”,以便您可以访问任务类型实例上的属性和方法。

请参见docs

答案 1 :(得分:4)

仅是其他答案的一小部分。如前所述,bound tasks可以访问任务实例。重试的一种用例是:

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

另一个用例是,您想为任务定义custom states并能够在任务执行期间进行设置:

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

答案 2 :(得分:1)

绑定任务

绑定任务意味着该任务的第一个参数将始终是任务实例(自身),就像 Python绑定方法

logger = get_task_logger(__name__)

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