在选择器中读/写的值状态是什么。 selectors.EVENT_WRITE?

时间:2019-06-30 23:36:28

标签: python-3.x client-server

在问题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 docs或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:]

1 个答案:

答案 0 :(得分:0)

在python selectors.py文件中创建以下变量:

  1. EVENT_READ = (1 << 0)
  2. 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:的情况下,将应用“按位与”。如果maskselectors.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')
  1. 如果mask = 0 |上面的if语句都不适合下面的条件。
  2. 如果mask = 1 |只有 event_read 是正确的。
  3. 如果mask = 2 |只有 event_write 是真实的。
  4. 如果mask = 3 |这两个if语句都是正确的。

if语句验证值的输出和每个掩码值的顺序在mask = 5、6等时重复其自身。

按位运算符引用12