python - 选择器中读/写的值状态是什么。EVENT_READ |选择器.EVENT_WRITE?

标签 python python-3.x client-server bitwise-operators

在问题Python - non-blocking sockets using selectors中使用以下代码:

事件 = 选择器.EVENT_READ |选择器.EVENT_WRITE

https://docs.python.org/3/library/selectors.html 中未提及或解释 event_read 或 event_write 标志的值。 select() 模块中或 https://realpython.com/python-sockets/ 中都没有给出解释。 。如果能强调这一特定部分或提供比 python 文档或 realpython 链接提供的更详细解释的阅读 Material ,我们将不胜感激。

相对而言,在服务连接期间使用: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文件中创建以下变量:

  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:为例应用“按位与”。如果 mask 的对应位,则输出的每一位均为 1与 selectors.EVENT_READ为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 为 true。
  3. 如果掩码 = 2 |只有 event_write 为 true。
  4. 如果掩码= 3 |两个 if 语句都为 true。

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

按位运算符引用12 .

关于python - 选择器中读/写的值状态是什么。EVENT_READ |选择器.EVENT_WRITE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56828742/

相关文章:

c - 在 C 中 echo 客户端-服务器

python - 将命名空间用于数据存储或将命名空间用于内存缓存

python - 如何设置httpd.conf(在CentOS上为Apache)与Flask应用一起使用?

python-3.x - 在 test_request_context 中捕获 Flask 中止状态代码

c - 希望我的客户端程序通过 IPv4 或 IPv6 连接

java - Android,客户端服务器通信

python flask - 提供静态文件

python - 在 unix 机器上运行下面的代码时出现问题,但相同的代码在运行 Windows 时工作正常

Python 字符串内的乘法值

html - Django:在导航栏中突出显示当前页面