因此,第 3 方针对某些限制值收取不同的费用。这么说吧,我很便宜,不想为无限制的访问支付全额费用。
我使用的方法相当简单,我只是在处理每个请求后调用 sleep 3 秒(支付每分钟 20 次调用的计划)。
这里是一些用于说明的剪辑代码:
import requests
import sqlite3
from time import sleep
timetosleep = 3
conn = sqlite3.connection('db.db')
c = conn.cursor()
keys = [
"A BIG LIST, SOMETHING LIKE len == 80K" #working with 500 at a time
]
def treatResponse(response):
#series of validations, some regex and stuff
returns "A TUPLE WITH DATA TO THE SQLITE DB"
for key in keys:
response = requests.get("API ADDRESS AND KEYS", {"auth":"auth"})
#if response is GREAT! yadayada
c.execute(
"""INSERT INTO tbl(field1, field2) values(?, ?)""",
treatResponse(response.json()))
conn.commit()
sleep(timetosleep)
由于用于处理响应的函数相当昂贵,需要一堆连续的正则表达式调用,并且服务器可能需要很长时间(相对于限制/分钟)来响应,因此等待 3 可能有点过分了整整几秒(甚至根本等待)。
有人有一个解决方案来计时每次迭代吗? 如果这个操作做得很好,它可以用来减少 sleep 定时器并大大提高性能。 TIA
最佳答案
也许将您的 for
循环设置为使用最大阈值进行迭代,而不是显式等待:
for key in keys:
start = time.time()
response = requests.get("API ADDRESS AND KEYS", {"auth:auth"})
#if response is GREAT! yadayada
c.execute(
"""INSERT INTO tbl(field1, field2) values(?, ?)""",
treatResponse(response.json()))
conn.commit()
timetosleep = 3. - (time.time()-start)
if timetosleep<0:
continue
sleep(timetosleep)
这样,如果你的函数花费超过 3 秒,它就不会休眠,否则它将等待剩余时间
关于python - 与第 3 方 API 交互时,定时处理时间以处理每分钟的请求限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51748968/