python-3.x - Celery 只重试循环中的失败请求并继续另一个
问题描述
我对 celery 整体有点陌生,并且在 for 循环中遇到了重试案例的问题:
我有以下任务:
@app.task(bind=True, autoretry_for=(CustomException,), retry_kwargs={'max_retries': 10,'countdown': 30})
def call_to_apis(self):
api_list = [api1, api2, api3, api4, api5,...]
for api in api_list:
try:
response = requests.get(api)
if response.status_code == 500:
raise CustomException
except CustomException:
continue
据我了解,芹菜将重试我的CustomException
成长。
在重试的情况下,是只重试失败的api还是重新运行api_list中每个api的整个过程?如果是这样,它是否只能重试失败的api?
预期结果:仅重试失败的 api
编辑:
我已将其拆分为 2 个不同的任务和 1 个请求功能,如下所示:
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
sender.add_periodic_task(300.0, call_to_apis.s())
print("setup_periodic_tasks")
def call_api(api):
response = requests.get(api)
if response.status_code == 500:
raise CustomException
elif response.status_code == 404:
raise CustomWrongLinkException
@app.task(default_retry_delay=30, max_retries=10)
def send_fail_api(api):
try:
call_api(api)
except NonceTooLowException:
try:
send_fail_api.retry()
except MaxRetriesExceededError:
print("reached max retry number")
pass
except Exception:
pass
@app.task()
def call_to_apis():
api_list = [api1, api2, api3, api4, api5,...]
for api in api_list:
try:
call_api(api)
except CustomException:
send_fail_api.delay(api)
except CustomWrongLinkException:
print("wrong link")
except Exception:
pass
它工作并且其他 api 完成,失败的 api 它应该调用另一个任务并重试 10 次,每次延迟 30 秒。
但是我重试了大约 24 次(预计只重试 10 次)并且它也在reached max retry number
第 10 次重试时打印出来但它仍然重试到 24 次重试
我究竟做错了什么 ?
解决方案
推荐阅读
- angular - 如何在 Ionic 4 的每个页面中使用地理位置
- pdf - PDF 文件中的可见签名
- ruby-on-rails - 如何做验证器的 RSpec?
- angular - 如何使用角度和数据库制作传单地图?
- python-3.x - Tensorflow TypeError:“numpy.ndarray”对象不可调用
- mongodb - 如何配置并连接到托管服务提供商服务器上的远程 MongoDB 服务器?
- python - Elasticsearch for python - 调用未正确阻塞
- windows-10 - 从文件名中提取日期戳并插入到 Date Taken meta (Windows)
- reactjs - React:对象作为 React 子级无效(找到:带键的对象。如果您打算渲染子级集合,请改用数组
- gatling - Gatling:在 .check(regex) 中提取多个组