python创建带有固定增量的随机数字列表

时间:2018-12-07 12:35:05

标签: python random python-requests

我有一个运行时间很长(几个小时)的脚本,该脚本定期将查询发送到服务器。服务器对负载非常敏感,因此查询稀疏(每3分钟不超过1个)。

服务器将始终只花费10分钟来处理查询。因此,发送查询10分钟后,我可以随时检查查询1的结果。

因此,有两种类型的操作,即“发送查询”和“查询检查结果”。我希望所有操作都以随机间隔进行(受约束的是,相邻操作之间至少要间隔3分钟)

按照此答案(https://stackoverflow.com/a/51918697/10690958)中的建议,我可以生成整数的时间序列,以使它们之间的间隔至少为3。让所有人成为系列1。

我还可以生成类似的状态检查查询时间序列(它们之间3分钟)。让我们称之为系列2。

现在系列1是随机间隔的。系列2也是随机间隔的。但是系列1和2之间存在相关性,即“响应时间” =“查询时间” + 10分钟。

系列1和2的并集将是随机的。此外,存在(非常小的)碰撞的可能性。例如,当查询一个查询1的结果时,查询2可能正好熄灭。

有没有办法使两个序列的并集也完全随机,并避免发生冲突的可能性。理想情况下,所有到服务器的流量(无论是查询还是状态检查)都应完全随机地间隔。

我意识到标题不是很具描述性,但无法找到描述情况的更好方法。如果您认为自己的描述更好,请进行编辑。

例如:

query_sequence=set([3,8,12,21,37])
check_result_sequence=set([13,18,22,31,47])
server_traffic=query_sequence.union(check_result_sequence)

但是他们的并集(server_traffic)不是随机的,因为

check_result_sequence=query_sequence+10

P.S .:  生成更精细的时间点可能有助于降低冲突的可能性(如评论中所述)。关于两个序列的并集的随机性,我看不到任何令人满意的解决方案。我最终决定要做的是

check_result_sequence=query_sequence+10+( 5*random.random())

这会在响应序列中添加一个随机的“抖动”,因此应有助于减少两个序列之间的相关性。

1 个答案:

答案 0 :(得分:0)

1)我几乎没有必要将请求之间的间隔随机化

2)您可以做一个清单:一个代表可以提交请求的时刻的清单

server_traffic=set([3,8,12,15,19,23,26,30,34,40])
for x in range(4):
    send_query(server_traffic)
while(True):
    send_result_request(server_traffic)
    send_query(server_traffic)

然后每次您决定使用自己的策略发送查询或检查结果时。这应该使一切变得简单