Я пытаюсь создать клиент-серверное приложение, в котором клиенты регистрируются на запрос и получают ответ позже.
Для быстрых вставок я использую defaultdict
.
{
"john": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
"ram": [2, 6],
"bruce": [1, 4, 5],
"willam": [7, 1],
}
Единственная проблема, которой подвержена эта структура данных, это "john"
, который выдает слишком много запросов, а сервер не можетчестно и своевременно обслуживать других клиентов.
Поэтому я подумал, что Roundrobin может прийти на помощь, дав мне итератор, который выдает таких клиентов -
"john", 0
"ram", 2
"bruce", 1
"willam", 7
"john", 1
"ram", 6
"bruce", 4
...
Может кто-нибудь сказать, пожалуйста, как я могу реализоватьтакой эффективный итератор?
РЕДАКТИРОВАТЬ: Это то, что я придумал.У кого-нибудь есть лучший способ сделать что-то?
def roundrobin(requests):
remaining = set(requests)
index = 0
while remaining:
up_next = set()
for key in remaining:
try:
print(key, requests[key][index])
except IndexError:
continue
up_next.add(key)
remaining = up_next
index += 1
Он выдает следующий вывод
ram 2
john 0
willam 7
bruce 1
bruce 4
ram 6
john 1
willam 1
john 2
bruce 5
john 3
john 4
john 5
john 6
john 7
john 8
john 9
john 10
john 11
john 12
john 13
john 14
john 15
john 16
john 17
john 18
john 19