使用python的queue实现线程_进程间通信

最近在做一个P2P的东西,使用Python和PyQt4开发,核心功能用xml-rpc实现。核心功能完成了一部分了,如加入P2P网络、查找节点等。 用PyQt做界面,但是不知道如何将后端和GUI结合起来。后端是一个xml-rpc的服务端主循环,起了几个线程用来维护节点列表,和查找同网段节点。我希望后端能调用GUI的方法更新界面数据。也需要GUI能提交命令给后端。我想过几种办法:
    多线程,把前后端写到一块,从PyQt起一个线程运行后端代码,这样好象比较乱,这是不是需要“线程间通信”?
    分开成两个进程,我发现很多软件,迅雷、风行什么的都是两个进程,应该是一个后端负责通信和处理数据,一个负责和用户交互吧。但是进程之间如何通信,我觉得xml-rpc是最简单的。直接把通信用的方法放到原来的类里面吗,还是再弄个xml-rpc服务?
程序现在是在Debian下开发,最终要打包成exe,在windows下运行的,多进程会不会麻烦?
带着这些问题,我查阅了很多资料,也在邮件列表里向人请教。最终决定使用Queue来做。经过探索,学到了很多Queue的用法,在此通过一个简单的例子说明一下:

import time
from Queue import Queue
from threading import Thread

def do_somthing(q):
    while 1:
        if not q.full():
            q.put('New task')
            print 'Put a new task at', time.strftime('%H:%M:%S', time.localtime())
            q.join()  #阻塞,直到任务完成

q = Queue()
t = Thread(target=do_somthing, args=(q,))
t.setDaemon(1)
t.start()

while 1:
    if not q.empty():
        print 'Got', q.get(),'at', time.strftime('%H:%M:%S', time.localtime())
        time.sleep(2)
        q.task_done() #告诉队列任务完成以解除阻塞
        time.sleep(1)

希望对大家有所帮助

1,808 views, since 2012-01-03