Python создает случайный список чисел с фиксированным приращением - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть длительный (несколько часов) скрипт, который периодически отправляет запросы на сервер.Сервер очень чувствителен к нагрузке, поэтому запросы редки (не чаще 1 раза в 3 минуты).

Серверу всегда будет требоваться ровно 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

PS: Генерация временных точек с большей степенью детализации может помочь уменьшить вероятность столкновений (как указано в комментарии).Что касается случайности объединения двух последовательностей, я не вижу удовлетворительного решения.В конце концов я решил сделать

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

. Это добавляет случайный «джиттер» к последовательности ответов, что должно помочь уменьшить корреляцию между двумя последовательностями.

1 Ответ

0 голосов
/ 07 декабря 2018

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)

Затем каждый раз, когда вы решаете, хотите ли вы отправить запрос или проверить результат, используя собственную политику.Это должно сделать все проще

...