python 如何进行线程间通信
1、选择使用queue(队列)库
使用queue库能够保证数据的安全及软件的稳定。
如图是源码queue的简介
2、使用消费者和生成者模式:
这是测试线程通信经典的模式。
设置这两个函数,
一个专门生成数据
一个专门使用数据
3、为了能够使线程正确退出,
我们需要设置一个终止的变量,
生成这结束的时候,发送这个变量,
而消费者接收到后,结束程序,
所以将生成这和消费者改为如图:
4、然后我们定义两个线程,
及队列。
并启动线程。
如下:
q = Queue()
t1 = Thread(target=consumer, args=(q,))
t2 = Thread(target=producer, args=(q,))
t1.start()
t2.start()
5、最后的总体代码如下:
#!/usr/bin/env python
# coding=utf-8
# test for tread 线程 通信
#创建一个给线程执行的函数
from queue import Queue
from threading import Thread
import time
_sentinel = object()
# A thread that produces data
def producer(out_q):
n = 0
while True:
n += 1
time.sleep(1)
print("producer:",n)
# 产生数据到队列里
out_q.put(n)
if n >= 5:
#表示生产线程结束
out_q.put(_sentinel)
break
print("producer done")
# A thread that consumes data
def consumer(in_q):
while True:
data = in_q.get()
# 出来数据 the data
if data is _sentinel:
in_q.put(_sentinel)
break
else:
print("consumer:",data)
print("consumer done")
#设置共享的队列q,然后启动两个线程:消费者和生成者
q = Queue()
t1 = Thread(target=consumer, args=(q,))
t2 = Thread(target=producer, args=(q,))
t1.start()
t2.start()
具体参考图片:
6、测试
使用cmd 测试此程序
进入到文件目录下
直接运行脚本,
详细见输出文件