Поскольку задача загрузки не является задачей синхронизации, вам нужна очередь задач для архивирования вашей цели.
Celery - это распределенная очередь задач, которая может быть легко интегрирована с 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