最近在做一个P2P的东西,使用Python和PyQt4开发,核心功能用xml-rpc实现。核心功能完成了一部分了,如加入P2P网络、查找节点等。 用PyQt做界面,但是不知道如何将后端和GUI结合起来。后端是一个xml-rpc的服务端主循环,起了几个线程用来维护节点列表,和查找同网段节点。我希望后端能调用GUI的方法更新界面数据。也需要GUI能提交命令给后端。我想过几种办法:
多线程,把前后端写到一块,从PyQt起一个线程运行后端代码,这样好象比较乱,这是不是需要“线程间通信”?
分开成两个进程,我发现很多软件,迅雷、风行什么的都是两个进程,应该是一个后端负责通信和处理数据,一个负责和用户交互吧。但是进程之间如何通信,我觉得xml-rpc是最简单的。直接把通信用的方法放到原来的类里面吗,还是再弄个xml-rpc服务?
程序现在是在Debian下开发,最终要打包成exe,在windows下运行的,多进程会不会麻烦?
带着这些问题,我查阅了很多资料,也在邮件列表里向人请教。最终决定使用Queue来做。经过探索,学到了很多Queue的用法,在此通过一个简单的例子说明一下:
01 import time
02 from Queue import Queue
03 from threading import Thread
04
05 def do_somthing(q):
06 while 1:
07 if not q.full():
08 q.put('New task')
09 print 'Put a new task at', time.strftime('%H:%M:%S', time.localtime())
10 q.join() #阻塞,直到任务完成
11 q = Queue()
12 t = Thread(target=do_somthing, args=(q,))
13 t.setDaemon(1)
14 t.start()
15
16 while 1:
17 if not q.empty():
18 print 'Got', q.get(),'at', time.strftime('%H:%M:%S', time.localtime())
19 time.sleep(2)
20 q.task_done() #告诉队列任务完成以解除阻塞
21 time.sleep(1)
本文分享了使用Python和PyQt4开发P2P应用程序的经验,重点介绍了如何利用Queue实现前后端之间的通信,并通过示例代码展示了具体实现过程。
2553

被折叠的 条评论
为什么被折叠?



