Python rq-scheduler:在一段时间后将失败的作业排入队列
Python rq-scheduler: enqueue a failed job after some interval
我正在使用 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 requests/minute。我已经创建了一个重试处理程序来优雅地处理 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)
(根据文档,作业代表延迟的函数调用)。如何使用所有 args 和 kwargs 重新排队作业函数?
任何帮助将不胜感激,如果有更好的方法来处理 API 速率限制,请告诉我。
伙计们干杯!
啊,下面的语句就可以了,
sch.enqueue_in(dt.timedelta(seconds=60), job.func, *job.args, **job.kwargs)
这个问题仍然悬而未决,如果有人对此有更好的方法,请告诉我。
我正在使用 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 requests/minute。我已经创建了一个重试处理程序来优雅地处理 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)
(根据文档,作业代表延迟的函数调用)。如何使用所有 args 和 kwargs 重新排队作业函数?
任何帮助将不胜感激,如果有更好的方法来处理 API 速率限制,请告诉我。
伙计们干杯!
啊,下面的语句就可以了,
sch.enqueue_in(dt.timedelta(seconds=60), job.func, *job.args, **job.kwargs)
这个问题仍然悬而未决,如果有人对此有更好的方法,请告诉我。