本文整理汇总了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)
示例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()