【发布时间】:2019-07-04 21:37:22
【问题描述】:
在问题Python - non-blocking sockets using selectors 中使用了以下代码:
events = selectors.EVENT_READ | selectors.EVENT_WRITE
https://docs.python.org/3/library/selectors.html 未提及或解释 event_read 或 event_write 标志的值。在select() 模块或https://realpython.com/python-sockets/ 中都没有给出解释。如果您强调这一特定部分,或者提供比 python 文档或 realpython 链接提供的更详细解释这一点的阅读材料,我们将不胜感激。
相关,在服务连接期间使用:if mask & selectors.EVENT_READ:
我可以想象评估可以是 1 & 1 或 2 & 2,并且在这两种情况下,if 语句中的代码都会被执行。所以如果表达式计算 3 & 1 它不会执行,对吧?
代码:
def service_connection(key, mask):
sock = key.fileobj
data = key.data
if mask & selectors.EVENT_READ:
recv_data = sock.recv(1024)
if recv_data:
data.outb += recv_data
else:
print('closing connection to', data.addr)
sel.unregister(sock)
sock.close()
if mask & selectors.EVENT_WRITE:
if data.outb:
print('echoing', repr(data.outb), 'to', data.addr)
sent = sock.send(data.outb)
data.outb = data.outb[sent:]
【问题讨论】:
-
@SteffenUllrich 也许您可以详细说明 events_read 和 events_write 状态?我在stackoverflow.com/questions/53045592/… 找到了你的答案,但并不令人满意。