如何将查询减慢到 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))