python - 如何在服务器处理之前仅进行 "n"API 调用

标签 python python-2.7 python-3.x

我有两个相同大小的大列表。我正在使用两个列表的第 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/

相关文章:

python - 在 session 中发出后续 POST 请求不起作用 - 网络抓取

python - Pyinstaller 错误 ImportError : No module named 'requests. packages.chardet.sys

python - 尝试更新 libpython3.6-stdlib 导致覆盖错误

python-3.x - 根据要删除的字符串列表删除字符串末尾的子字符串

python - 如何检查字符串日期格式是否可排序?

Python Selenium 无法在网站中找到 ID

python - 如何为 Flask-Admin 添加摘要行?

python - python中tkinter输入框中的条件

python - 如何从异步方法/线程传递/交换数据?

python-3.x - Pygame:用颜色填充文本的透明区域