• python异步回调函数的实现


    #coding:utf-8 
    from socket import *  
    import time  
      
    #简单的服务器程序 监听用户连接,接收用户发来的信息,并返回反馈  
    def main():  
        HOST = ""  
        PORT = 3316  
        BUFSIZE = 1024  
        ADDR = (HOST, PORT)  
        tcpSerSock = socket(AF_INET, SOCK_STREAM)  
        tcpSerSock.bind(ADDR)  
        tcpSerSock.listen(5)  
        print "YoSQL bind port %d ,starting ...." % PORT  
        while  1:  
            print 'waiting for connection ...'  
            tcpCliSock, addr = tcpSerSock.accept()  
            print '...connected from:',addr  
      
            while 1:  
                try:  
                    data = tcpCliSock.recv(BUFSIZE)  
                    if not data:  
                        break  
                    print 'data = %s' % data  
                    i = data.find('[')  
                    j = data.find(']')  
                    if i!=-1 and j!=-1:  
                        sFuncId = data[i+1:j]  
                        message = data[j+1:]  
                        time.sleep(2)  
                        SendToListener("[%s] echo" % sFuncId)  
                except Exception, e:  
                    print e  
                    break  
            tcpCliSock.close()  
        tcpSerSock.close()  
      
    def SendToListener(message):  
        listenerSock = socket(AF_INET, SOCK_STREAM)  
        listenerSock.connect(('localhost',7800))  
        listenerSock.send(message)  
        listenerSock.close()  
        print 'send to listener: %s' % message  
      
    if __name__ == '__main__':  
        main()  
    #http://blog.csdn.net/payinglee/article/details/9005010
    #coding:utf-8
    import threading  
    import time  
    from socket import *  
      
    lCallback = {}  
    iFuncId = 0   
      
    #首先注册函数,当接收到来自YoSQL的信息后,再调用该函数  
    #callback机制:为某一事件注册回调函数,当事件发生时,调用该函数  
    def StartListener():  
        global iFuncId  
        global lCallback  
        HOST = ""  
        PORT = 7800  
        BUFSIZE = 1024  
        ADDR = (HOST, PORT)  
        tcpSerSock = socket(AF_INET, SOCK_STREAM)  
        tcpSerSock.bind(ADDR)  
        tcpSerSock.listen(5)  
        print "Listener bind port %d ,starting ...." % PORT  
        while 1:  
            print 'waiting for connection ...'  
            tcpCliSock, addr = tcpSerSock.accept()  
            print '...connected from:',addr  
            while 1:  
                try:  
                    data = tcpCliSock.recv(BUFSIZE)  
                    if not data:  
                        break  
                    print 'data = %s' % data  
                    i = data.find('[')  
                    j = data.find(']')  
                    if i!=-1 and j!=-1:  
                        iFuncId = int(data[i+1:j])  
                        message = data[j+1:]  
                        func = lCallback.get(iFuncId,None)  
                        if func:  
                            func()  
                            del lCallback[iFuncId]  
                except Exception,e:  
                    print e  
                    break  
            tcpCliSock.close()  
        tcpSerSock.close()  
      
      
    def MyCallback():  
        print 'callback called !!!!!!!!!!'  
      
      
    def Send(callback,message):  
        global iFuncId  
        global lCallback  
        lCallback[iFuncId] = callback  
        listenerSock = socket(AF_INET, SOCK_STREAM)  
        listenerSock.connect(('localhost',3316))  
        listenerSock.send("[%d] %s" % (iFuncId,message))  
        listenerSock.close()  
        iFuncId += 1  
        print 'send message to YoSQL : %s'%message  
      
    def DoSomeThing():  
        print '......DoSomeThing......'  
    if __name__ == '__main__':  
        t = threading.Thread(target=StartListener)  
        t.setDaemon(True)  
        t.start()  
        # t.join()  
        DoSomeThing()  
        DoSomeThing()  
        Send(MyCallback,"hahaha")  
        i = 0  
        while i < 20:  
            i+= 1  
            DoSomeThing()  
            try:  
                time.sleep(0.5)  
            except Exception,e:  
                print e  
                break  
        # t.join(2)  
        print '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'  
  • 相关阅读:
    mySQL如何在查询的结果前添加序号
    bootstrap 列表前添加序号 1.10版本
    sql 如何优先显示不为空的字段 并进行排序
    java面向对象总结
    线程总结(二)
    数据库索引介绍(转载)
    线程总结(一)
    GUI图形界面编程之事件处理机制
    Eclipse快捷键大全(转载)
    JDBC数据库编程总结
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/5626636.html
Copyright © 2020-2023  润新知