python线程间通信
问题
- 程序有数据改变的时候立即发送,没有数据时候定时发送一次
解决方案
-
本质:线程间的通信
-
思路
开两个线程,一个用来接收数据(键盘),另外一个用来发送数据。两个线程之间通过队列或者自定义数据中心,利用条件变量中的wait(timeout)设置超时,实现定时发送。如果新数据到来利用notify通知wait线程发送数据 注:利用队列来进行线程间通信是一个单向,不确定的过程,通常情况下没有办法知道接收的数据线程是什么时候接收到数据并开始工作。 -
代码
#!/usr/bin/env python # coding=utf-8 #这个类是单例模式 from threading import Thread import threading import os import msvcrt con=threading.Condition() class DataCenter: __instance = None def __new__(cls): if cls.__instance==None: cls.__instance=object.__new__(cls) cls.__instance._flag=1 return cls.__instance else: return cls.__instance def __init__(self): if self._flag==1: self._flag=0 self._data=None def set_data(self,value): self._data=value def get_data(self): return self._data def send(data): while True: con.acquire() ret=con.wait(0.5) con.release() if ret==None: print('超时的值:',data.get_data()) else: print('接收的值',data.get_data()) def read(data): while True: key=msvcrt.getch() print('输入的值:',key) con.acquire() data.set_data(key) con.notify() con.release() if __name__=='__main__': data=DataCenter() _thread=threading.Thread(target=read,args=(data,)) _thread2=threading.Thread(target=send,args=(data,)) _thread.start() _thread2.start()

浙公网安备 33010602011771号