我有两个相同大小的大列表。我正在使用两个列表的第 i 个元素作为参数进行子进程调用:
for index in range(len(skuList)):
sku = skuList[index]
qty = qtyList[index]
cmd1 = 'php -f ReviseItem.php %s %s' % (sku,qty)
print cmd1
args1 = shlex.split(cmd1)
p=subprocess.Popen(args1)
p.wait()
我实际上是在 ReviseItem
脚本中进行 API 调用。但是,API 服务器允许我最多发出 15 个请求,并在接下来的 2 分钟内受到限制。我该如何修改我的代码来满足这个要求。有没有办法在产生 15 个子进程后停止执行 2 分钟?
编辑:在 15 个请求后等待 2 分钟后,我仍然受到限制。看来我会受到限制,直到服务器处理 15 个请求,如所述 here
而不是在提出请求之后。
EDIT2:如果我受到限制并且请求未得到处理,我会在标准输出中收到以下消息(以及其他消息):
<ErrorResponse xmlns="http://mws.amazonaws.com/doc/2009-01-01/">
<Error>
<Type></Type>
<Code>RequestThrottled</Code>
<Message>Request is throttled</Message>
</Error>
<RequestID>3ca74b8b-cdc2-47df-b48b-043eb5411cda</RequestID>
</ErrorResponse>
此外,我还可以进行另一个 API 调用来查找上次处理的请求的请求 ID。同样,请求 ID 位于调用(原始调用和此调用)以及其他消息的标准输出中
最佳答案
当然 - 只需保留最近 15 次生成子进程的时间戳列表即可。在生成新的子进程之前,如果列表中有 15 个时间戳,请检查最旧的时间戳是否至少为两分钟;如果不是,请等待适当的时间,直到它为止。然后添加新的时间戳,如果超过 15 个,则删除最旧的时间戳。
关于python - 如何在服务器处理之前仅进行 "n"API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078766/