首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >selectors.EVENT_READ / selectors.EVENT_WRITE中读/写的值状态是什么?

selectors.EVENT_READ / selectors.EVENT_WRITE中读/写的值状态是什么?
EN

Stack Overflow用户
提问于 2019-06-30 23:36:28
回答 1查看 1.1K关注 0票数 2

在问题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,它将不会执行,对吗?

守则:

代码语言:javascript
复制
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:]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-03 14:46:19

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

  1. EVENT_READ = (1 << 0)
  2. EVENT_WRITE = (1 << 1)

如果两者都被打印出来,则为每个状态给出以下值:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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\x,上面所有的if -语句对于下面的语句都是正确的。
  2. 如果掩码=1,则只有event_read为真。
  3. 如果掩码=2,则只有event_write为真。
  4. 如果掩码=3\x,这两个if语句都是真的。

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

按位运算符引用12

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56828742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档