跳转到主要内容

gevent的简单连接池

项目描述

https://badge.fury.io/py/gsocketpool.png https://travis-ci.org/studio-ousia/gsocketpool.png?branch=master

gevent的简单连接池。

基本用法

以下是一个示例,创建一个连接池,该连接池与运行在localhost 2000上的echo服务器进行通信。

>>> from gsocketpool import Pool
>>> from gsocketpool import TcpConnection
>>>
>>> options = dict(host='localhost', port=2000)
>>> pool = Pool(TcpConnection, options)
>>>
>>> with pool.connection() as conn:
...     conn.send('hello')
...     print conn.recv()
hello

实现协议

可以通过扩展Connection类轻松实现任意协议。您至少需要重写三个函数,如open()close()is_connected()

上述示例中使用的TcpConnection也是作为Connection的子类实现的。

class TcpConnection(Connection):

    def __init__(self, host, port, lifetime=600, timeout=None):
        self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._host = host
        self._port = port
        self._lifetime = lifetime
        self._timeout = timeout
        self._connected = False
        self._created = None

    def get(self):
        return self._sock

    def open(self):
        self._sock.connect((self._host, self._port))
        if self._timeout:
            self._sock.settimeout(self._timeout)

        self._connected = True
        self._created = time.time()

    def close(self):
        if self._connected:
            self._sock.close()
            self._connected = False

    def is_connected(self):
        return self._connected

    def is_expired(self):
        if time.time() - self._created > self._lifetime:
            return True
        else:
            return False

    def send(self, data):
        assert self._connected

        self._sock.send(data)

    def recv(self, size=1024):
        assert self._connected

        return self._sock.recv(size)

文档

文档可在http://gsocketpool.readthedocs.org/找到。

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪一个,请了解有关安装包的更多信息。

源分布

gsocketpool-0.1.6.tar.gz (5.5 kB 查看哈希值)

上传时间 源代码

支持者

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面