---
title: "使用python的queue实现线程_进程间通信"
url: "https://lerry.me/post/2012/01/itc_with_queue"
date: 2012-01-03T12:59:00.000Z
updated: 2026-09-05T21:39:31.990Z
tags:
  - "Python"
language: zh-CN
---

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

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

```python
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)
```

希望对大家有所帮助
