当前位置: 首页>>代码示例>>Python>>正文


Python Event.set_fd方法代码示例

本文整理汇总了Python中event.Event.set_fd方法的典型用法代码示例。如果您正苦于以下问题:Python Event.set_fd方法的具体用法?Python Event.set_fd怎么用?Python Event.set_fd使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在event.Event的用法示例。


在下文中一共展示了Event.set_fd方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: __init__

# 需要导入模块: from event import Event [as 别名]
# 或者: from event.Event import set_fd [as 别名]
class Acceptor:

    def __init__(self, prefix=None):
        self._prefix = prefix

        self._fd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._fd.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self._fd.setblocking(False)

        self._rev = Event()
        self._rev.set_write(False)
        self._rev.set_fd(self._fd.fileno())
        self._rev.set_handler(lambda ev: self._on_accept())

        self._onAccepted = None
        self._onClosed = None

    def bind(self, addr, port):
        _logger.debug('bind')
        self._fd.bind((addr, port))
        _logger.debug('bind to: %s:%d', addr, port)

    def listen(self, backlog=0):
        _logger.debug('listen')
        self._fd.listen(backlog)
        Event.addEvent(self._rev)

    def _on_accept(self):
        _logger.debug('_on_accept')
        while True:
            try:
                sock, addr = self._fd.accept()
                _logger.debug('fd: %d accept fd: %d',
                              self._fd.fileno(), sock.fileno())
            except socket.error as msg:
                if msg.errno == errno.ECONNABORTED:
                    continue
                if msg.errno != errno.EAGAIN and msg.errno != errno.EINPROGRESS:
                    _logger.error('fd: %d, accept: %s',
                                  self._fd.fileno(), os.strerror(msg.errno))
                    self._fd.close()
                    if self._onClosed is not None:
                        try:
                            self._onClosed(self)
                        except Exception as ex:
                            _logger.error('_onClosed: %s', str(ex))
                            _logger.exception(traceback.format_exc())
                return
            else:
                new_stream = Stream(sock, prefix=self._prefix)
                new_stream._connected = True
                try:
                    self._onAccepted(new_stream, addr)
                except Exception as e:
                    _logger.error('_onAccepted: %s', e)
                    _logger.exception(traceback.format_exc())
                    new_stream.close()

    def set_on_accepted(self, on_accepted):
        self._onAccepted = on_accepted

    def set_on_closed(self, on_closed):
        self._onClosed = on_closed
开发者ID:binasc,项目名称:utils,代码行数:65,代码来源:acceptor.py

示例2: NonBlocking

# 需要导入模块: from event import Event [as 别名]
# 或者: from event.Event import set_fd [as 别名]
class NonBlocking(object):

    class _ReceiveHandlerContext(object):

        def __init__(self, handler):
            self.handler = handler
            self.remain = []

    def __init__(self, fd, prefix=None):
        self._fd = fd
        self._prefix = prefix
        self.set_non_blocking()

        self._to_send = deque()
        self._to_send_bytes = 0

        self._encoders = []
        self._decoders = []

        self._error = False

        self._connected = False
        self._fin_received = False
        self._fin_appended = False
        self._fin_sent = False
        self._closed = False

        self._on_ready_to_send = None
        self._on_send_buffer_full = None
        self._on_received = None
        self._on_fin_received = None
        self._on_closed = None

        self._fin_ev = None
        self._close_ev = None

        self._wev = Event()
        self._wev.set_write(True)
        self._wev.set_fd(self._fd.fileno())
        self._wev.set_handler(lambda ev: self._on_send())

        self._rev = Event()
        self._rev.set_write(False)
        self._rev.set_fd(self._fd.fileno())
        self._rev.set_handler(lambda ev: self._on_receive())

        self._errorType = socket.error

        self._decode_error = False
        self._on_decode_error = None

    def __hash__(self):
        return hash(self._fd.fileno())

    def __eq__(self, other):
        if not isinstance(other, NonBlocking):
            return False
        return self._fd.fileno() == other._fd.fileno()

    def __str__(self):
        if self._closed:
            return "%s: #" % self._prefix
        else:
            return "%s: %d" % (self._prefix, self._fd.fileno())

    def set_non_blocking(self):
        raise NotImplemented

    def set_on_ready_to_send(self, handler):
        self._on_ready_to_send = handler

    def set_on_send_buffer_full(self, handler):
        self._on_send_buffer_full = handler

    def set_on_received(self, on_received):
        self._on_received = on_received

    def set_on_fin_received(self, on_fin_received):
        self._on_fin_received = on_fin_received

    def set_on_closed(self, on_closed):
        self._on_closed = on_closed

    def set_on_decode_error(self, on_decode_error):
        self._on_decode_error = on_decode_error

    def append_send_handler(self, handler):
        self._encoders.append(handler)

    def append_receive_handler(self, handler):
        self._decoders.append(self._ReceiveHandlerContext(handler))

    def start_receiving(self):
        _logger.debug('%s, start_receiving', str(self))
        if self._close_ev is not None:
            return
        if not self._connected or self._fin_received or self.is_closed():
            return
        if not Event.isEventSet(self._rev):
            _logger.debug('%s, start_receiving::addEvent', str(self))
#.........这里部分代码省略.........
开发者ID:binasc,项目名称:utils,代码行数:103,代码来源:nonblocking.py


注:本文中的event.Event.set_fd方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。