查询异步Web服务的速率?

时间:2016-01-13 01:52:13

标签: python asynchronous python-requests

我正在使用python中的requests包来查询正在为我执行某些处理的异步Web服务。如何确定在检查处理状态之间等待的最佳间隔?对于某些典型的处理请求,您是否需要生成典型等待时间的分布?如果您生成了这样的数据集,它会有用吗?

修改

正如您可能从documentation中看到的那样,似乎没有关于此服务的回叫选项可以让我知道处理已完成。

这是一个直方图,显示初始请求和处理完成之间的等待时间(以秒为单位)的分布:

enter image description here

1 个答案:

答案 0 :(得分:2)

作为一般规则,异步操作应提供一些已完成的信号,因此不必轮询它们。检查文档以查看在请求完成时是否可以调用回调函数。

如果你别无选择,只能轮询,那么目标是尽量减少接受响应的延迟,同时不要过度轮询过度加载服务。适当的比例将取决于服务实际请求的相对成本与服务投票的成本。

响应时间主要取决于排队的其他请求的服务往往具有遵循泊松分布的响应时间,但其他分布也是可能的。

在大多数情况下,在接近平均响应时间之前,甚至没有必要开始轮询。

这些可能很有用:

  • 记录最近查询的时间,用于估计未来的请求(平均值,stddev和各种分布的“拟合”,包括泊松)
  • 使用符合预期分配的退避策略;通常这意味着指数回退。加倍很容易计算,但有点粗糙;中庸(Φ=(1 +√5)/ 2)是一个很好的通用比例,但你可以为你的特定应用做得更好。
  • 由于查询过期而导致的失败率是多少?
  • 底层系统是否有合理的方法来取消正在进行的查询,还是只是继续在服务器上运行以吸收资源?)