芹菜中 bind = True 关键字的含义是什么?

新手上路,请多包涵

下面的 芹菜 代码中 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)

原文由 Devang Padhiyar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 462
2 个回答

只是对其他答案的一小部分补充。如前所述, 绑定任务 可以访问任务实例。需要这样做的一个用例是重试:

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

原文由 Tomáš Linhart 发布,翻译遵循 CC BY-SA 4.0 许可协议

绑定任务

被绑定的任务意味着任务的第一个参数将始终是任务实例(self),就像 Python 绑定方法 一样:

 logger = get_task_logger(__name__)

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

原文由 Devang Padhiyar 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题