使用Python的Queue实现线程/进程间通信
2012-04-25 22:20
786 查看
链接
最近在做一个P2P的东西,使用Python和PyQt4开发,核心功能用xml-rpc实现。核心功能完成了一部分了,如加入P2P网络、查找节点等。 用PyQt做界面,但是不知道如何将后端和GUI结合起来。后端是一个xml-rpc的服务端主循环,起了几个线程用来维护节点列表,和查找同网段节点。我希望后端能调用GUI的方法更新界面数据。也需要GUI能提交命令给后端。我想过几种办法:
多线程,把前后端写到一块,从PyQt起一个线程运行后端代码,这样好象比较乱,这是不是需要“线程间通信”?
分开成两个进程,我发现很多软件,迅雷、风行什么的都是两个进程,应该是一个后端负责通信和处理数据,一个负责和用户交互吧。但是进程之间如何通信,我觉得xml-rpc是最简单的。直接把通信用的方法放到原来的类里面吗,还是再弄个xml-rpc服务?
程序现在是在Debian下开发,最终要打包成exe,在windows下运行的,多进程会不会麻烦?
带着这些问题,我查阅了很多资料,也在邮件列表里向人请教。最终决定使用Queue来做。经过探索,学到了很多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)
相关文章推荐
- 在python中实现生产者和消费者的例子(二):使用multiprocessing和queue
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- python使用queue队列实现生产者消费者
- Python多线程编程(八):使用Event实现线程间通信
- Python 使用threading+Queue实现线程池
- 如何使用Python实现进程间通信
- python中线程的使用以及生产者和消费者的实现
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- Python使用面向对象方式创建线程实现12306售票系统
- Python:使用threading模块实现多线程编程八[使用Event实现线程间通信]
- Python3之线程Queue实现生产者消费者模型
- Python进程间通信,使用multiprocessing.connection的Listener和Client实现
- python 线程简单使用----1利用threading 实现多线程
- Python中的线程使用 和 queue
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- python使用threading获取线程函数返回值的实现方法
- [Python数据结构] 使用 Circular List实现Queue
- 使用 Python 和 Oracle 数据库实现高并发性 了解如何借助线程和并发性提升支持 Oracle 数据库的 Python 应用程序的吞吐量和响应性。
- Python:使用threading模块实现多线程编程八[使用Event实现线程间通信]
- Python使用面向对象方式创建线程实现12306售票系统