我有一个长时间运行(几个小时)的脚本,它定期向服务器发送查询。服务器对负载非常敏感,因此查询稀疏(每3分钟不超过1次)。
服务器总是花费 10 分钟来处理查询。这样我就可以在发送查询 1 10 分钟后随时查看结果。
所以有两种操作,“发送查询”和“检查查询结果”。我希望所有操作以随机间隔发生(受到相邻操作之间至少有 3 分钟的限制)
按照此答案 ( https://stackoverflow.com/a/51918697/10690958 ) 中的建议,我可以生成一个整数时间序列,使得它们之间至少有 3 的间隙。让一切成为系列 1。
我还可以生成类似的状态检查查询时间序列(间隔 3 分钟)。我们将此系列称为 2。
现在系列 1 是随机间隔的。系列 2 也是随机间隔的。但系列 1 和系列 2 之间存在相关性,即“响应时间”=“查询时间”+10分钟。
系列 1 和系列 2 的结合不会是随机的。此外,发生碰撞的可能性(非常小)。例如,查询 2 可能正好在检查查询 1 的结果时发出。
有没有办法使两个序列的结合也完全随机,并避免冲突的可能性。理想情况下,到服务器的所有流量(无论是查询还是状态检查)都应该是完全随机的间隔。
我意识到标题不太具有描述性,但无法找到更好的方式来描述情况。如果您认为您有更好的描述,请编辑。
例如:
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
附注: 生成更精细的时间点可能有助于降低冲突的可能性(如评论中所述)。至于两个序列并集的随机性,我没有看到任何令人满意的解决方案。我最终决定做的是
check_result_sequence=query_sequence+10+( 5*random.random())
这会向响应序列添加随机“抖动”,因此有助于减少两个序列之间的相关性。
最佳答案
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)
然后,每次您决定是否要使用自己的策略发送查询或检查结果时。这应该会让一切变得更容易
关于python 创建随机数字列表以及固定增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53669665/