【问题标题】:What are the value states of read/write in selectors.EVENT_READ | selectors.EVENT_WRITE?选择器中读/写的值状态是什么。EVENT_READ |选择器.EVENT_WRITE?
【发布时间】: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:]

【问题讨论】:

标签: python-3.x client-server


【解决方案1】:

在 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. 如果掩码 = 0 |上述 if 语句均不适用于以下。
  2. 如果掩码 = 1 |只有 event_read 为真。
  3. 如果掩码 = 2 |只有 event_write 为真。
  4. 如果掩码 = 3 |两个 if 语句都为真。

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

按位运算符引用12

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2022-07-21
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    相关资源
    最近更新 更多