我有一个运行时间很长(几个小时)的脚本,该脚本定期将查询发送到服务器。服务器对负载非常敏感,因此查询稀疏(每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())
这会在响应序列中添加一个随机的“抖动”,因此应有助于减少两个序列之间的相关性。
答案 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)
然后每次您决定使用自己的策略发送查询或检查结果时。这应该使一切变得简单