本文整理汇总了Python中uselect.POLLIN属性的典型用法代码示例。如果您正苦于以下问题:Python uselect.POLLIN属性的具体用法?Python uselect.POLLIN怎么用?Python uselect.POLLIN使用的例子?那么, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在类uselect
的用法示例。
在下文中一共展示了uselect.POLLIN属性的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: run
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def run():
global success
ok = True
try:
while ok:
res = poller.ipoll(10)
for sock, ev in res:
if ev & select.POLLIN:
r = sock.readline()
print(ev, r)
# A server outage prints 1, b'' forever on ESP8266 or Unix.
# If killer closes socket on ESP8266 ev is always 1,
# on Unix get ev == 32
# Never see 9 or 17 (base 10) which are the error responses expected by uasyncio
# (POLLIN & POLLERR or POLLIN & POLLHUP)
else: # The only way I can make it work (on Unix) is to quit on 32
print('Terminating event:', ev) # What is 32??
ok = False
break
await asyncio.sleep(0)
except OSError:
print('Got OSError') # Never happens
success = True # Detected socket closure or error by OSError or event
示例2: run
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def run(self, loop, port=8123):
addr = socket.getaddrinfo('0.0.0.0', port, 0, socket.SOCK_STREAM)[0][-1]
s_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # server socket
s_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s_sock.bind(addr)
s_sock.listen(5)
self.socks = [s_sock] # List of current sockets for .close()
print('Awaiting connection on port', port)
poller = select.poll()
poller.register(s_sock, select.POLLIN)
client_id = 1 # For user feedback
while True:
res = poller.poll(1) # 1ms block
if res: # Only s_sock is polled
c_sock, _ = s_sock.accept() # get client socket
loop.create_task(self.run_client(c_sock, client_id))
client_id += 1
await asyncio.sleep_ms(200)
示例3: add_reader
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def add_reader(self, sock, cb, *args):
if DEBUG and __debug__:
log.debug("add_reader%s", (sock, cb, args))
if args:
self.poller.register(sock, select.POLLIN)
self.objmap[id(sock)] = (cb, args)
else:
self.poller.register(sock, select.POLLIN)
self.objmap[id(sock)] = cb
示例4: add
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def add(self, target, socket=None):
if not socket:
socket = target.sockets()
if self.use_poll:
self.poller.register(socket, select.POLLIN)
# dbg("add device on fileno: %s" % socket.fileno() )
self.targets[socket.fileno()] = target
# dbg("size targets: %s" % len(self.targets))
示例5: run
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def run(expected, verbose=False, port=8123, timeout=2000):
addr = socket.getaddrinfo('0.0.0.0', port, 0, socket.SOCK_STREAM)[0][-1]
s_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # server socket
s_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s_sock.bind(addr)
s_sock.listen(len(expected) + 2)
verbose and print('Awaiting connection.', port)
poller = select.poll()
poller.register(s_sock, select.POLLIN)
to_secs = timeout / 1000 # ms -> secs
while True:
res = poller.poll(1) # 1ms block
if res: # Only s_sock is polled
c_sock, _ = s_sock.accept() # get client socket
c_sock.setblocking(False)
try:
data = await _readid(c_sock, to_secs)
except OSError:
c_sock.close()
else:
Connection.go(to_secs, data, verbose, c_sock, s_sock,
expected)
await asyncio.sleep(0.2)
# A Connection persists even if client dies (minimise object creation).
# If client dies Connection is closed: ._close() flags this state by closing its
# socket and setting .sock to None (.status() == False).
示例6: __init__
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def __init__(self, addr, s, close_callback):
self.client_close = False
self._need_check = False
self.address = addr
self.socket = s
self.ws = websocket(s, True)
self.poll = uselect.poll()
self.close_callback = close_callback
self.socket.setblocking(False)
self.poll.register(self.socket, uselect.POLLIN)
示例7: _check_new_connections
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def _check_new_connections(self, accept_handler):
poll_events = self._listen_poll.poll(0)
if not poll_events:
return
if poll_events[0][1] & uselect.POLLIN:
accept_handler()
示例8: add_reader
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def add_reader(self, sock, cb, *args):
if DEBUG and __debug__:
log.debug("add_reader%s", (sock, cb, args))
# HACK This should read
# self._register(sock, select.POLLIN)
# Temporary workround for https://github.com/micropython/micropython/issues/5172
# The following is not compliant with POSIX or with the docs
self._register(sock, select.POLLIN | select.POLLHUP | select.POLLERR) # t35tB0t add HUP and ERR to force LWIP revents
if args:
self.rdobjmap[id(sock)] = (cb, args)
else:
self.rdobjmap[id(sock)] = cb
示例9: remove_reader
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def remove_reader(self, sock):
if DEBUG and __debug__:
log.debug("remove_reader(%s)", sock)
self._unregister(sock, self.rdobjmap, select.POLLIN)
示例10: wait
# 需要导入模块: import uselect [as 别名]
# 或者: from uselect import POLLIN [as 别名]
def wait(self, delay):
if DEBUG and __debug__:
log.debug("poll.wait(%d)", delay)
# We need one-shot behavior (second arg of 1 to .poll())
res = self.poller.ipoll(delay, 1)
#log.debug("poll result: %s", res)
for sock, ev in res:
if ev & select.POLLOUT:
cb = self.wrobjmap[id(sock)]
if cb is None:
continue # Not yet ready.
# Invalidate objmap: can get adverse timing in fast_io whereby add_writer
# is not called soon enough. Ignore poll events occurring before we are
# ready to handle them.
self.wrobjmap[id(sock)] = None
if ev & (select.POLLHUP | select.POLLERR):
# These events are returned even if not requested, and
# are sticky, i.e. will be returned again and again.
# If the caller doesn't do proper error handling and
# unregister this sock, we'll busy-loop on it, so we
# as well can unregister it now "just in case".
self.remove_writer(sock)
if DEBUG and __debug__:
log.debug("Calling IO callback: %r", cb)
if isinstance(cb, tuple):
cb[0](*cb[1])
else:
prev = cb.pend_throw(None) # Enable task to run.
#if isinstance(prev, Exception):
#print('Put back exception')
#cb.pend_throw(prev)
self._call_io(cb) # Put coro onto runq (or ioq if one exists)
if ev & select.POLLIN:
cb = self.rdobjmap[id(sock)]
if cb is None:
continue
self.rdobjmap[id(sock)] = None
if ev & (select.POLLHUP | select.POLLERR):
# These events are returned even if not requested, and
# are sticky, i.e. will be returned again and again.
# If the caller doesn't do proper error handling and
# unregister this sock, we'll busy-loop on it, so we
# as well can unregister it now "just in case".
self.remove_reader(sock)
if DEBUG and __debug__:
log.debug("Calling IO callback: %r", cb)
if isinstance(cb, tuple):
cb[0](*cb[1])
else:
prev = cb.pend_throw(None) # Enable task to run.
#if isinstance(prev, Exception):
#cb.pend_throw(prev)
#print('Put back exception')
self._call_io(cb)