ZZZ
Очереди, это правильно. Посмотри на RabbitMQ.
Или beanstakd…
ZZZ
Очереди, это правильно. Посмотри на RabbitMQ.
py.user.nextЧто-то типа такого?
у каждого клиента должна быть своя очередь
#!/usr/bin/python3 import datetime from threading import Thread from queue import Queue class my_little_sheduller(Thread): def __init__(self, *args, **kwargs): Thread.__init__(self, *args, **kwargs) self.little_queue = Queue() self.workers = [] def run(self): while True: for worker in self.workers: if int(datetime.datetime.now().timestamp()) - worker.last_req < 10: continue #текущий воркер пусть подождёт немного, пропускаем print("Помещаю задание в очередь") #беру задание из основной очереди и помещаю в очередь воркера, раз мы его не пропустили worker.little_queue.put(self.little_queue.get()) #Изменяю запись о времени последнего запроса в нём worker.last_req = int(datetime.datetime.now().timestamp()) class my_little_worker(Thread): def __init__(self, name, *args, **kwargs): Thread.__init__(self, *args, **kwargs) self.name = name self.little_queue = Queue() self.last_req = 0 def run(self): while True: if self.little_queue.not_empty: #И тут типа запрос к серверу print(self.name + " " + self.little_queue.get()) little_sheduller = my_little_sheduller() for i in range(5): little_sheduller.workers.append(my_little_worker("cool worker" + str(i))) for worker in little_sheduller.workers: worker.start() #заполняю основную очередь заданиями for i in range(100500): little_sheduller.little_queue.put("msg " + str(i)) little_sheduller.start()
MetallikusЭто полная хрень, но направление верное. Очередь надо создать снаружи и передать её как в распределитель, так и в клиент. То есть должна быть одна очередь между распределителем и клиентом, в которую распределитель пишет с интервалом, а клиент читает постоянно. При этом, если клиент может получать какие-то новые данные, которые требуют новых действий от него, то должна быть вторая очередь в обратную сторону - от клиента к распределителю. Если у тебя клиентов несколько, то обратную очередь можно сделать одну для всех, но сделать возможность определения источника каждого сообщения в очереди.
Что-то типа такого?