python - python创建随机数字列表以及固定增量
问题描述
我有一个长时间运行(几个小时)的脚本,它会定期向服务器发送查询。服务器对负载非常敏感,因此查询很稀疏(每 3 分钟不超过 1 个)。
服务器将始终花费 10 分钟来处理查询。所以我可以在发送 10 分钟后随时检查查询 1 的结果。
所以有两种操作,“发送查询”和“查询查询结果”。我希望所有操作都以随机间隔发生(受制于相邻操作之间至少有 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
PS:生成更细粒度的时间点可能有助于降低冲突概率(如评论中所述)。至于两个序列联合的随机性,我没有看到任何令人满意的解决方案。我最终决定做的是
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)
然后,每次您决定是否要使用自己的策略发送查询或检查结果时。这应该使一切变得更容易
推荐阅读
- html - 尝试通过相对路径链接我的 html 页面时出现问题
- python - 如何在 django 的视图中导入和使用 python 文件?
- c++ - 试图找到两个随机节点并将它们交换到双向链表中
- python - 使用 Groupy 库的 Groupme 机器人出现字符编码错误
- python - 根据数据框值获取列名和索引
- xcode - 如何在 SideMenu 库中运行示例?
- c# - WPF 从多个视图模型将选项卡项添加到选项卡控件
- java - 从一组字节数组重新创建文件
- sql - 如何为 SQL 中的每个 user_id 列值选择 10 个随机行(记录)?
- java - 您如何编写需要密码才能满足某些要求的单个方法?