selectors.EVENT_READ 中 read/write 的值状态是什么 | selectors.EVENT_WRITE?
What are the value states of read/write in selectors.EVENT_READ | selectors.EVENT_WRITE?
问题中使用了以下代码:
events = selectors.EVENT_READ | selectors.EVENT_WRITE
event_read 或 event_write 标志的值未在 https://docs.python.org/3/library/selectors.html. Neither is an explanation give in the select()
module or given at https://realpython.com/python-sockets/ 中提及或解释。如果能强调这一特定部分或提供比 python 文档或真实 python link.
相关的,在服务连接期间使用: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:]
在 python selectors.py
文件中创建了以下变量:
EVENT_READ = (1 << 0)
EVENT_WRITE = (1 << 1)
如果两者都打印,则为每个州提供以下值:
print(EVENT_READ) = 1
print(EVENT_WRITE) = 2
发生以下情况(按位向左移动):
bin(0b1) -> '0b1' # bitwise operator for EVENT_READ = (1 << 0)
bin(0b1) -> '0b10' # bitwise operator for EVENT_WRITE = (1 << 1)
在 if mask & selectors.EVENT_READ:
的情况下应用 "bitwise and"。如果 mask
AND selectors.EVENT_READ
对应的位为 1,则输出的每一位都为 1,否则为 0。
mask = integer # 0, 1, 2, 3 or higher.
if mask & EVENT_READ:
print ('mask & EVENT_READ')
if mask & EVENT_WRITE:
print ('mask & EVENT_WRITE')
- 如果掩码 = 0 |以上if-statements中的None以下为真
- 如果掩码 = 1 |只有 event_read 是正确的。
- 如果掩码 = 2 |只有 event_write 是正确的。
- 如果掩码 = 3 |两个 if 语句都为真。
对于掩码 = 5、6 等,每个掩码值的 if-statement 验证值输出和顺序重复自身。
问题
events = selectors.EVENT_READ | selectors.EVENT_WRITE
event_read 或 event_write 标志的值未在 https://docs.python.org/3/library/selectors.html. Neither is an explanation give in the select()
module or given at https://realpython.com/python-sockets/ 中提及或解释。如果能强调这一特定部分或提供比 python 文档或真实 python link.
相关的,在服务连接期间使用: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:]
在 python selectors.py
文件中创建了以下变量:
EVENT_READ = (1 << 0)
EVENT_WRITE = (1 << 1)
如果两者都打印,则为每个州提供以下值:
print(EVENT_READ) = 1
print(EVENT_WRITE) = 2
发生以下情况(按位向左移动):
bin(0b1) -> '0b1' # bitwise operator for EVENT_READ = (1 << 0)
bin(0b1) -> '0b10' # bitwise operator for EVENT_WRITE = (1 << 1)
在 if mask & selectors.EVENT_READ:
的情况下应用 "bitwise and"。如果 mask
AND selectors.EVENT_READ
对应的位为 1,则输出的每一位都为 1,否则为 0。
mask = integer # 0, 1, 2, 3 or higher.
if mask & EVENT_READ:
print ('mask & EVENT_READ')
if mask & EVENT_WRITE:
print ('mask & EVENT_WRITE')
- 如果掩码 = 0 |以上if-statements中的None以下为真
- 如果掩码 = 1 |只有 event_read 是正确的。
- 如果掩码 = 2 |只有 event_write 是正确的。
- 如果掩码 = 3 |两个 if 语句都为真。
对于掩码 = 5、6 等,每个掩码值的 if-statement 验证值输出和顺序重复自身。