python 如何进行线程间通信
当使用多个线程操作任务的时候,如果线程间有需要通信的地方,那么不可避免的要实现到线程间的通信,来互相通知消息,同步任务的执行。这里将简单介绍一下如何通过python实现线程间的通信。
工具/原料
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 Queuefrom threading import Threadimport time_sentinel = object()# A thread that produces datadef 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 datadef 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 测试此程序进入到文件目录下直接运行脚本,详细见输出文件