gpt4 book ai didi

redis - Python rq-scheduler:在一定间隔后将失败的作业加入队列

转载 作者:行者123 更新时间:2023-12-03 06:45:18 25 4
gpt4 key购买 nike

我正在使用python RQ在后台执行作业。该作业将调用第三方rest API,并将响应存储在数据库中。 (请参阅下面的代码)

@classmethod
def fetch_resource(cls, resource_id):
import requests

clsmgr = cls(resource_id)

clsmgr.__sign_headers()

res = requests.get(url=f'http://api.demo-resource.com/{resource_id}', headers=clsmgr._headers)

if not res.ok:
raise MyThirdPartyAPIException(res)

....

第三方API有一些速率限制,例如每分钟7个请求。我创建了一个重试处理程序,以优雅地处理 429 too many requests HTTP状态代码,并在一分钟后(时间单位根据速率限制而变化)重新排队。要在一定间隔后重新排队,我正在使用 rq-scheduler
请在下面找到附加的处理程序代码,
def retry_failed_job(job, exc_type, exc_value, traceback):

if isinstance(exc_value, MyThirdPartyAPIException) and exc_value.status_code == 429:

import datetime as dt

sch = Scheduler(connection=Redis())

# sch.enqueue_in(dt.timedelta(seconds=60), job.func_name, *job.args, **job.kwargs)

我在将失败的作业重新排队回到任务队列时遇到问题。由于我无法在处理程序代码中直接调用 sch.enqueue_in(dt.timedelta(seconds=60), job)(根据文档,作业代表延迟的函数调用)。如何重新排列所有arg和kwarg的job函数?

任何帮助将不胜感激,如果有更好的方法来处理API速率限制,请告诉我。

大家好!

最佳答案

啊,下面的语句起作用了,
sch.enqueue_in(dt.timedelta(seconds=60), job.func, *job.args, **job.kwargs)
这个问题仍然悬而未决,请让我知道是否有人对此有更好的方法。

关于redis - Python rq-scheduler:在一定间隔后将失败的作业加入队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60352053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com