python实现简单redis客户端(3)使用asyncio添加异步支持

来源:互联网 发布:修改sql触发器 编辑:程序博客网 时间:2024/06/05 14:55

使用Python3标准库的asyncio来进行异步连接

import asyncio@asyncio.coroutinedef create_connection(host,port, loop=None):    reader, writer = yield from asyncio.open_connection(host, port, loop=loop)    conn = RedisClient(reader, writer, loop=loop)    return connclass RedisClient:    def __init__(self,reader,writer,loop=None):        self._reader = reader        self._writer = writer        self._loop = loop    def format_command(self,*tokens, **kwargs):        cmds = []        for t in tokens:            cmds.append("$%s\r\n%s\r\n" % (len(t), t))        return "*%s\r\n%s" % (len(tokens), "".join(cmds))    def execute_command(self,cmd,*args,**kwargs):        command = self.format_command(cmd,*args,**kwargs)        self._writer.write(command.encode('utf-8'))        yield from self._writer.drain()        data = yield from self._reader.read(65536)        return  data.decode('utf-8')      def set(self,key,value):        result = self.execute_command("SET",key,value)        return result    def get(self,key):        value = self.execute_command("GET",key)        return valuedef main():    loop = asyncio.get_event_loop()    @asyncio.coroutine    def go():        conn = yield from create_connection('localhost', 6379,loop=loop)        ok = yield from conn.set('love', '123')        value = yield from conn.get('love')        print(value)    loop.run_until_complete(go())if __name__ == '__main__':    main()

效果:
这里写图片描述

原创粉丝点击