celery 停止任务_如何在执行celery任务时停止它并在一段时间后继续执行?(How to stop celery task while it is being executed and con...

本文讨论如何在Celery任务执行过程中遇到Twitter API速率限制时,暂停任务一段时间并随后恢复执行。示例代码展示了一个与Twitter API交互的任务,当收到429错误(速率限制)时,任务会自动重试,经过15分钟的延迟后再继续执行。此方法利用了Celery的自我重试机制`self.retry`来实现。
摘要由CSDN通过智能技术生成

如何在执行celery任务时停止它并在一段时间后继续执行?(How to stop celery task while it is being executed and continue the execution after some time?)

我有以下芹菜任务(简化),它与Twitter API交互。

@app.task

def get_followers(screen_name, **kwargs):

cursor = kwargs.get('cursor', -1)

followers = kwargs.get('followers', [])

while True:

response = twitter_api.call('followers', 'ids', screen_name=screen_name, cursor=cursor)

if response.status_code == '429': # RATE LIMIT EXCEEDED

# do something here

cursor = response.json()['next_cursor']

if cursor == 0: # we're done

break

return followers

我希望能够在达到速率限制时暂停任务一段时间,并从停止的位置恢复执行。 (或者抛出错误并重试任务,传入额外的kwargs)。 如何实现这一目标?

I have the following celery task(simplified), which interacts with Twitter API.

@app.task

def get_followers(screen_name, **kwargs):

cursor = kwargs.get('cursor', -1)

followers = kwargs.get('followers', [])

while True:

response = twitter_api.call('followers', 'ids', screen_name=screen_name, cursor=cursor)

if response.status_code == '429': # RATE LIMIT EXCEEDED

# do something here

cursor = response.json()['next_cursor']

if cursor == 0: # we're done

break

return followers

I want to be able to pause task for some time when the rate limit is hit, and resume the execution from the point where it left off. (Or throw an error and retry the task, passing in additional kwargs). How can this be accomplished?

原文:https://stackoverflow.com/questions/40887865

2020-08-18 22:08

满意答案

您可以在捕获429错误代码时重试您的任务:

@app.task(bind=True)

def get_followers(self, screen_name, **kwargs):

cursor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值