我正在使用 Huey/Hueyx 作为队列来缓冲我需要使用 pythons 请求库获取的资源。凭证(一个令牌)存储在 Redis 中,任务执行器调用该函数,获取资源,然后将其索引到弹性搜索。因为我需要请求数百万个不同的资源,而我的解决方案非常慢(每分钟大约 5k 个请求),所以队列很快备份并且性能受到影响。
def get_raw_resource(url, token, id):
try:
url = f"{url}/api/v2/{id}"
headers = {
'Accept': "application/json",
'Authorization': f"Bearer {token}",
'Cache-Control': "no-cache"
}
response = requests.get(url, headers=headers)
[snip]
@res_q.task(delay=10, retries=3, retry_delay=180)
def get_resource_es(client_id, id):
[snipped redis stuff]
try:
res = get_raw_resource(url, token, id)
parsed = parse_res(res)
es.index(index=es_index, body=parsed, id=id)
except Exception as e:
raise e
我的问题是:我怎样才能通过一些简单的步骤更快地完成整个考验?添加更多消费者始终是一种选择,但在探索其他选择之前,我现在不想这样做。我读过异步代码,但看起来它会使代码的复杂性增加四倍。另外,我对异步编程模型一无所知。