gpt4 book ai didi

python - gevent套接字如何只阻止当前的greenlet?

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:53 26 4
gpt4 key购买 nike

我正在阅读gevent.socket但我不明白。

def recv(self, *args):
sock = self._sock # keeping the reference so that fd is not closed during waiting
while True:
try:
return sock.recv(*args)
except error, ex:
if ex[0] == EBADF:
return ''
if ex[0] != EWOULDBLOCK or self.timeout == 0.0:
raise
# QQQ without clearing exc_info test__refcount.test_clean_exit fails
sys.exc_clear()
try:
wait_read(sock.fileno(), timeout=self.timeout, event=self._read_event)
except error, ex:
if ex[0] == EBADF:
return ''
raise

sockrecv_realsocket(family, type, proto) 的一个实例。在 socket.py 中我发现:

import _socket
_realsocket = _socket.socket

什么是_socket?为什么不return sock.recv(*args)阻止整个程序?

最佳答案

_socket是python的一个标准c库,提供真正的网络通信,和socket.py(在标准库或gevent中)包装方法以供常用。

然后,查看gevent.socket中Socket类的init

```self._sock.setblocking(0)```

该语句使套接字对象成为非阻塞

关于python - gevent套接字如何只阻止当前的greenlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17267283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com