使用Python的Queue实现线程/进程间通信

链接


    最近在做一个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)








你可能感兴趣的:(thread,多线程,python,Debian,import,p2p)