gevent的简单连接池
gsocketpool的Python项目详细描述
一个简单的gevent连接池。
基本用法
下面是创建连接池的示例,该连接池与运行在localhost 2000上的echo服务器进行通信。
>>>fromgsocketpoolimportPool>>>fromgsocketpoolimportTcpConnection>>>>>>options=dict(host='localhost',port=2000)>>>pool=Pool(TcpConnection,options)>>>>>>withpool.connection()asconn:...conn.send('hello')...printconn.recv()hello
实施协议
通过扩展Connection类,可以轻松实现任意协议必须重写至少三个函数,如open()、close()和is_connected()。
tcpconnection在上面的示例中使用的也是作为连接的子类实现的。
classTcpConnection(Connection):def__init__(self,host,port,lifetime=600,timeout=None):self._sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)self._host=hostself._port=portself._lifetime=lifetimeself._timeout=timeoutself._connected=Falseself._created=Nonedefget(self):returnself._sockdefopen(self):self._sock.connect((self._host,self._port))ifself._timeout:self._sock.settimeout(self._timeout)self._connected=Trueself._created=time.time()defclose(self):ifself._connected:self._sock.close()self._connected=Falsedefis_connected(self):returnself._connecteddefis_expired(self):iftime.time()-self._created>self._lifetime:returnTrueelse:returnFalsedefsend(self,data):assertself._connectedself._sock.send(data)defrecv(self,size=1024):assertself._connectedreturnself._sock.recv(size)