Я читаю, как использовать Python Queues для отправки и получения коротких сообщений между узлами. Я моделирую набор узлов, которые находятся в красивой древовидной структуре. Я хочу, чтобы некоторые из этих узлов отправляли данные фиксированного размера своему родителю. Как только этот родительский объект получает данные от некоторых дочерних узлов, он «обрабатывает» их и отправляет «совокупный» пакет его родительскому ... и т. Д.
Для этого мне сказали, что очереди будут полезны для передачи сообщений, и быстрое чтение говорит о том, что это будет соответствовать моим потребностям. Тем не менее, мне сложно реализовать базовую настройку и проверить мое понимание - 1 производитель (который генерирует пакет сообщения) и 1 потребитель (рабочий поток, который отменяет задачу и обрабатывает ее).
Я искал и читал много сообщений здесь и в других местах ... и я понимаю все методы очереди. Я до сих пор не понимаю, как связать или связать очередь с двумя указанными узлами.
Я хочу, чтобы узел-1 и узел-2 отправляли сообщения узлу-3. Для этого базового сценария я должен каким-то образом создать одну (или 2) очередь и «связать» ее с узлом-1 и узлом-2, который использует его для размещения сообщений в узле-3. Кроме того, узел-3 также должен быть «прослушивающим» / «связанным» с этой очередью, чтобы «получить» или удалить задачу из очереди.
Если узел-1 и узел-2 должны быть «производителями», я должен иметь их как 2 отдельных потока, а узел-3 - как третий поток. Затем я должен создать одну очередь Q. Затем мне нужно, чтобы узел-1 и узел-2 создавали сообщения, «помещали» их в очередь. Узел 3 должен быть «как-то» уведомлен / пробужден, чтобы «получить» эти сообщения от Q и обработать его.
Я видел
http://docs.python.org/library/queue.html#module-Queue
Вот (непроверенный) код, который у меня есть:
=============================================== ==================
import threading
import queue
q = Queue.Queue(2) # create a queue of size 2.
# worker is node-3 which received msgs from 1 and 2 and fuses them.
def worker():
while True:
msg = q.get()
fuse_msgs(msg)
q.task_done()
# generate 3 worker threads. Node-3 could be both a producer and consumer. Each
# thread represents each node that will be a potential producer/consumer or both.
# need something like t1 - thread-1 for node-1 ...
for i in range(3):
t = Thread(target=worker)
t.setDaemon(True)
t.start()
# How can I make node-1 and node-2 to put items into a specified queue???
for msg in source():
q.put(item)
q.join()
=========================================
Я иду в правильном направлении? Пожалуйста, дайте мне знать, где я не прав и в чем я не понимаю ...
Любая помощь приветствуется. У меня есть сотни узлов и ссылок. Если я получу эти основные принципы прямо, я смогу двигаться гладко ...
Спасибо,
B.R.Srini.