python实现简单redis客户端(3)使用asyncio添加异步支持
2017-08-26 21:25
1071 查看
使用Python3标准库的asyncio来进行异步连接
效果:
import asyncio @asyncio.coroutine def create_connection(host,port, loop=None): reader, writer = yield from asyncio.open_connection(host, port, loop=loop) conn = RedisClient(reader, writer, loop=loop) return conn class 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 value def 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()
效果:
相关文章推荐
- python实现简单redis客户端(2)重构
- werkzeug实现简单Python web框架(2):添加jinjia2模板支持
- werkzeug实现简单Python web框架(4):添加orm支持
- Python使用Redis实现作业调度系统(超简单)
- python实现简单redis客户端(1)
- Python使用Redis实现一个简单作业调度系统
- Python使用Redis实现作业调度系统(超简单)
- Python使用Redis实现作业调度系统(超简单)
- 实现支持文件分块多点异步上传的 Web Services 及其客户端(非Web)应用程序调用相关异步执行的 Web Method
- windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
- Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持
- python实现的douban.fm客户端,添加登录功能
- 简单使用redis客户端
- Ajax 之使用 XMLHttp实现简单的异步数据加载
- python实现的douban.fm客户端,添加登录功能
- python实现简单的redis 队列 SIMPLE PYTHON QUEUE WITH REDIS
- socket下server端支持多客户端并发访问简单实现
- 实现支持文件分块多点异步上传的 Web Services 及其客户端(非Web)应用程序调用相关异步执行的 Web Method
- Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持
- 使用python多线程实现一个简单spider