zoukankan      html  css  js  c++  java
  • 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 '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'  
  • 相关阅读:
    Maven的pom文件依赖提示 ojdbc6 Missing artifact,需要手动下载并导入maven参考
    Maven全局配置文件settings.xml详解(转)
    SpringBoot -- 项目结构+启动流程
    64匹马,8个赛道,找出前4名最少比赛多少场?——最快10次,最慢11次;
    Spring家族主流成员介绍
    java 中文与unicode互转
    Netty的Marshalling编解码器
    解决svn迁移过程中出现:SVN Error: is not the same repository as的问题
    netty入门实例
    Dubbo的使用及原理
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/5626636.html
Copyright © 2011-2022 走看看