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


Python IOLoop.add_handler方法代码示例

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


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

示例1: test_close_file_object

# 需要导入模块: from tornado.ioloop import IOLoop [as 别名]
# 或者: from tornado.ioloop.IOLoop import add_handler [as 别名]
    def test_close_file_object(self):
        """When a file object is used instead of a numeric file descriptor,
        the object should be closed (by IOLoop.close(all_fds=True),
        not just the fd.
        """
        # Use a socket since they are supported by IOLoop on all platforms.
        # Unfortunately, sockets don't support the .closed attribute for
        # inspecting their close status, so we must use a wrapper.
        class SocketWrapper(object):
            def __init__(self, sockobj):
                self.sockobj = sockobj
                self.closed = False

            def fileno(self):
                return self.sockobj.fileno()

            def close(self):
                self.closed = True
                self.sockobj.close()
        sockobj, port = bind_unused_port()
        socket_wrapper = SocketWrapper(sockobj)
        io_loop = IOLoop()
        io_loop.add_handler(socket_wrapper, lambda fd, events: None,
                            IOLoop.READ)
        io_loop.close(all_fds=True)
        self.assertTrue(socket_wrapper.closed)
开发者ID:EliseCheng,项目名称:tornado,代码行数:28,代码来源:ioloop_test.py

示例2: run_socket

# 需要导入模块: from tornado.ioloop import IOLoop [as 别名]
# 或者: from tornado.ioloop.IOLoop import add_handler [as 别名]

#.........这里部分代码省略.........
            c.execute('UPDATE history SET status = ? WHERE id = ?',
                    (status, row_id, ))

        def update_final_status(status):
            c.execute('''UPDATE history SET disconnected_at = ?, status = ?,
                         sent = ?, received = ?
                         WHERE id = ?''',
                    (datetime.utcnow(), status, sent.getvalue(),
                        received.getvalue(), row_id, ))

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        try:
            s.connect(host)
        except socket.error as e:
            if e.errno == errno.ECONNRESET:
                update_final_status("RESET")
            else:
                raise

        s.setblocking(0)
        set_nonblocking(datasource)

        log("[I]", "Connected.")
        update_connected()

        def read_till_block(fd, step=1):
            data = ""
            while True:
                try:
                    tmp = os.read(fd, step)
                    if not tmp:
                        return data if data else None
                    data += tmp
                except OSError as e:
                    if e.args[0] == errno.EWOULDBLOCK:
                        break
                    else:
                        raise
            return data

        @engine
        def stop():
            yield Task(io_loop.add_timeout, timedelta(milliseconds=STOP_DELAY))
            io_loop.stop()

        def process_socket_errno(no):
            log("[E]", errno.errorcode[no] + ":", os.strerror(no))
            if no == errno.ECONNRESET:
                update_final_status("RESET")
            else:
                update_final_status(errno.errorcode[no])
            io_loop.remove_handler(s.fileno())
            io_loop.remove_handler(datasource.fileno())
            stop()

        def on_socket_events(fd, events):
            if events & io_loop.READ:
                try:
                    data = read_till_block(fd)
                except OSError as e:
                    process_socket_errno(e.args[0])
                    return

                if data is not None:
                    with ExceptionIgnored():
                        sys.stdout.write(data)
                    received.write(data)
                else:
                    log("[I]", "Socket closed.")
                    update_final_status("DISCONNECTED")
                    io_loop.remove_handler(s.fileno())
                    io_loop.remove_handler(datasource.fileno())
                    stop()

            if events & io_loop.ERROR:
                no = s.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
                process_socket_errno(no)
                return

        def on_file_events(fd, events):
            if events & io_loop.READ:
                data = read_till_block(fd)
                if data is not None:
                    s.send(data)
                    sent.write(data)
                else:
                    log("[I]", "Input file closed.")
                    io_loop.remove_handler(fd)

        io_loop.add_handler(s.fileno(), on_socket_events, io_loop.READ)
        io_loop.add_handler(datasource.fileno(), on_file_events, io_loop.READ)

        try:
            io_loop.start()
        except KeyboardInterrupt:
            s.close()
            log("[I]", "Disconnected.")
            update_final_status("DISCONNECTED")
            stop()
开发者ID:ccp0101,项目名称:gfw-filter-test,代码行数:104,代码来源:test.py


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