Python 如何在执行芹菜任务时停止它,并在一段时间后继续执行?

Python 如何在执行芹菜任务时停止它,并在一段时间后继续执行?,python,django,python-3.x,celery,Python,Django,Python 3.x,Celery,我有以下芹菜任务(简化),它与twitterapi交互 @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=scre

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

@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

我希望能够在达到速率限制时暂停任务一段时间,并从停止点恢复执行。(或抛出错误并重试任务,传入其他KWARG)。如何实现这一点?

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

@app.task(bind=True)
def get_followers(self, 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
            self.retry(countdown=15*60)

        cursor = response.json()['next_cursor']
        if cursor == 0: # we're done
            break
    return followers
请注意,我在任务装饰器中添加了
bind=True
,并将
self
作为任务定义中的参数,以便能够执行
self。收到429后重试

重试
中,使用参数
倒计时
说明您希望何时重试任务(以秒为单位)。这里我选择了15分钟(twitter API速率限制)

您可以在芹菜文档中找到有关重试的更多信息:


检查这个:还有这个:@mohammad yusuf ghazi我知道这些页面,我对这里的芹菜部分特别感兴趣。据我所知,如果我有
sleep\u on\u rate\u limit=True
并且超过了速率限制,那么任务将“挂在那里”,在接下来的15分钟内消耗工作池中的空间,不是吗?那么您必须对api进行异步调用。检查有关此问题的链接@穆罕默德·优素福·加齐(mohammad yusuf ghazi)对不起,但我不明白这与我的问题有什么关系。我对芹菜任务有问题,而不是API调用。此外,我使用的是django而不是tornado(这仅在问题的标记部分提到,但它应该与假设的解决方案无关)