如何将查询减慢到 API 以防止多处理的查询上限?
How can I slow queries to API to prevent query cap with multiprocessing?
我 运行 遇到了 ConceptNet API 上查询上限的问题。我正在为包含数千个单词的词汇表中的每个单词下载查询,但 API 的查询上限为每分钟 600 次调用。如果我从一个脚本发送查询,我可以简单地每 0.1 秒调用一次(1 minute/600 调用)。但是,我正在使用多个同时查询 API 的进程。
我目前的方法是使用 JoinableQueue
来跟踪调用了多少查询。当队列有 600 个元素时,我暂停执行一分钟。
这似乎不是最省时的解决方案,因为如果 600 次调用需要超过 1 分钟才能完成,则服务器的计时器已经重置(我假设)。
是否有更省时的解决方案来避免上限?
我认为可以简单地为执行 API 调用的代码的每个部分计时,然后休眠剩余的 0.1 秒。我做了一些类似于测试工具的速率限制输出的事情,例如:
for x in xrange(event_count):
start = time.time()
yield json.dumps(m.get_mock()) + '\n'
elapsed = time.time() - start
time.sleep(max((1 / hits_sec) - elapsed, 0))
我 运行 遇到了 ConceptNet API 上查询上限的问题。我正在为包含数千个单词的词汇表中的每个单词下载查询,但 API 的查询上限为每分钟 600 次调用。如果我从一个脚本发送查询,我可以简单地每 0.1 秒调用一次(1 minute/600 调用)。但是,我正在使用多个同时查询 API 的进程。
我目前的方法是使用 JoinableQueue
来跟踪调用了多少查询。当队列有 600 个元素时,我暂停执行一分钟。
这似乎不是最省时的解决方案,因为如果 600 次调用需要超过 1 分钟才能完成,则服务器的计时器已经重置(我假设)。
是否有更省时的解决方案来避免上限?
我认为可以简单地为执行 API 调用的代码的每个部分计时,然后休眠剩余的 0.1 秒。我做了一些类似于测试工具的速率限制输出的事情,例如:
for x in xrange(event_count):
start = time.time()
yield json.dumps(m.get_mock()) + '\n'
elapsed = time.time() - start
time.sleep(max((1 / hits_sec) - elapsed, 0))