我正在阅读如何利用Python队列在节点之间发送和接收短消息。我正在模拟一组漂亮的树结构中的节点。我希望其中一些节点向其父节点发送固定大小的数据。一旦这个父节点从它的一些子节点接收数据,它将“处理”它并向其父节点发送一个“聚合”数据包......依此类推。
要做到这一点,我被告知队列对于传递消息很有用,并且快速读取它会告诉我它将满足我的需要。但是,我发现实现基本设置并测试我的理解有点困难 - 1生成器(生成消息包)和1个消费者(使任务出列并处理它的工作线程)。
我在这里和其他地方搜索并阅读过很多帖子......我理解所有队列方法。我仍然不明白的是如何将队列关联或绑定到2个给定节点。
我希望node-1和node-2向node-3发送消息。对于这个基本场景,我必须以某种方式创建一个(或2个)队列并将其与node-1和node-2“关联”,它使用它将消息放入node-3。并且,node-3还必须与此队列“侦听”/“关联”以“获取”或将队列出列。
如果node-1和node-2是'producer',我应该将它们作为2个独立的线程,node-3作为第3个线程。然后,我必须创建一个队列Q.然后,我应该让node-1和node-2创建消息,将它们“放入”队列中。 Node-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。
答案 0 :(得分:1)
我不是特别评论python代码,但是就你的队列设计而言,你似乎只需要在你描述的节点1,2,3场景中需要一个队列。基本上,你有一个队列,你有节点1和节点2放置消息,节点3读取。
您应该能够告诉node-3对队列执行“阻塞”操作,因此它只会等到它看到要处理的消息,并让节点1和2快速生成输出尽可能。
根据每个节点的处理速度以及您期望的流量模式,您可能需要一个比2条消息更深的队列,这样生成节点就不必等待队列耗尽。