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()
    
posted @ 2019-12-29 19:48  2km2  阅读(303)  评论(0)    收藏  举报