在问题Python -使用选择器的非阻塞套接字中,使用了以下代码:
events = selectors.EVENT_READ | selectors.EVENT_WRITE
event_read或event_write标志的值未在https://docs.python.org/3/library/selectors.html中提及或解释。无论是在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:]发布于 2019-07-03 14:46:19
在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:的情况下,将应用“按位和”。如果mask和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')if-语句验证值输出和每个掩码值的顺序重复对掩码= 5、6等。
https://stackoverflow.com/questions/56828742
复制相似问题