Python 如何在Django中定期重复一个函数,直到在后台成功?
我在做一个Django项目。我想向外部服务器发出http请求。但有时外部服务器返回5xx。我想在后台重试请求,直到它返回200。我该怎么做? 这是我想做的一个伪代码:Python 如何在Django中定期重复一个函数,直到在后台成功?,python,django,scheduling,periodic-task,Python,Django,Scheduling,Periodic Task,我在做一个Django项目。我想向外部服务器发出http请求。但有时外部服务器返回5xx。我想在后台重试请求,直到它返回200。我该怎么做? 这是我想做的一个伪代码: response=requests.post(url,json=param) 如果response.status_code==200: #做点什么 elif response.status_code>=500: #计划每30秒重试一次任务,直到成功 像这样的东西可以达到以下目的: import time RETRY_TIME =
response=requests.post(url,json=param)
如果response.status_code==200:
#做点什么
elif response.status_code>=500:
#计划每30秒重试一次任务,直到成功
像这样的东西可以达到以下目的:
import time
RETRY_TIME = 30
referenceTime = time.time()
while(1):
currentTime = time.time()
dt = currentTime - referenceTime
if(dt > RETRY_TIME):
referenceTime += RETRY_TIME
print("hello")
# do your request here
if(response.status_code == 200):
break
由于下载任务不是同步任务,您需要一个任务队列来归档您的目标 是一种分布式任务队列,可以轻松地与Django集成 您可以创建如下下载任务:
from proj.celery import app
@app.task(bind=True)
def download(self, url, param):
response = requests.post(url, json=param)
if response.status_code == 200:
# do something
...
elif response.status_code >= 500:
# schedule task to retry every 30 seconds until success
raise self.retry(countdown=30)
要调用您的任务:
download.apply_async(('YOUR DOWNLOAD URL', None))
有关芹菜的参考资料:
在你的理解中,“在Django的背景中”意味着什么