gevent.socket --低层协同组网接口

此模块提供套接字操作和一些相关功能。函数和类的API与标准中相应项的API匹配 socket 模块完全正确,但此模块中的同步功能只会阻塞当前greenlet并让其他模块运行。

小技巧

与大多数gevent对象一样,gevent的套接字具有线程关联性。也就是说,它们只能从创建它们的操作系统线程中使用(该线程中的任何greenlet都可以使用套接字)。尝试在另一个线程中使用套接字的结果(例如,将其传递给threadpool)尚未定义(但一个常见结果是 LoopExit 例外)。

为方便起见,例外情况(如 errortimeout )以及 socket 模块导入到此模块中。在几乎所有情况下,都可以简单地替换 import socket 具有 from gevent import socket 开始使用没有其他更改的协作套接字(或使用 gevent.monkey.patch_socket() 启动时,如果不需要或不可能更改代码)。

标准库接口

此模块公开的确切API因所使用的Python版本而异。下面的文档分别描述了Python2和Python3的API。

注解

所有描述的API都应该从 gevent.socketnot 从它们的实现模块。他们的组织是一个可以随时更改的实现细节。

gethostbyname(host) address[源代码]

返回主机的IP地址(格式为“255.255.255.255”的字符串)。

class socket[源代码]

合作套接字对象。有关详细信息,请参阅版本文档。

在 20.12.0 版更改: 套接字对象不再具有 __dict__ 或者接受任意实例变量。以前它们是这样做的,但标准库套接字从来没有这样做。

GEvent扩展

除了基本的标准库接口, gevent.socket 提供一些扩展。这些是相同的,并且由所有版本的Python共享。

在 1.3a2 版更改: 无证阶层 BlockingResolver 已记录并移至 gevent.resolver.blocking.Resolver .

等待

这些函数用于阻塞当前greenlet,直到打开的文件(socket)准备好执行I/O操作。这些是许多程序不常用的低级功能。

注解

它们使用底层事件循环 io 观察者,这意味着他们共享相同的实现限制。例如,在某些平台上,它们不仅可以与套接字一起使用,而在其他平台上,其适用性则更为有限(Linux和OS X等POSIX平台可以使用管道和FIFO,但Windows仅限于套接字)。

注解

在带有libev事件循环的Windows上,gevent被限制为1024个打开的套接字。

wait_read(fileno, timeout=None[, timeout_exc=None]) None[源代码]

阻止当前的greenlet,直到 文件描述符 准备好阅读了。

有关其他参数和可能的异常的含义,请参见 wait() .

参见

cancel_wait()

wait_write(fileno, timeout=None[, timeout_exc=None]) None[源代码]

阻止当前的greenlet,直到 文件描述符 准备好写了。

有关其他参数和可能的异常的含义,请参见 wait() .

1.1 版后已移除: 关键字参数 事件 被忽略。应用程序不应传递此参数。将来,这样做将成为一个错误。

参见

cancel_wait()

wait_readwrite(fileno, timeout=None[, timeout_exc=None]) None[源代码]

阻止当前的greenlet,直到 文件描述符 准备好读或写。

有关其他参数和可能的异常的含义,请参见 wait() .

1.1 版后已移除: 关键字参数 事件 被忽略。应用程序不应传递此参数。将来,这样做将成为一个错误。

参见

cancel_wait()

wait(watcher, timeout=None[, timeout_exc=None]) None

阻止当前的greenlet,直到 观察者 准备好了。

如果 超时 是非负的,那么 timeout_exc 在之后提升 超时 第二个已经过去了。

如果 cancel_wait() 被调用 io 通过另一个greenlet,在这个阻塞greenlet中引发异常 (socket.error(EBADF, 'File descriptor was closed in another greenlet') 默认情况下)。

参数
  • io -- 事件循环观察程序,通常是从 gevent.core.loop.io()

  • timeout_exc -- 超时过期时引发的异常。默认情况下,a socket.timeout 引发异常。如果传递此关键字的值,则会将其解释为 gevent.timeout.Timeout .

引发

ConcurrentObjectUseError -- 如果 观察者 已启动。

cancel_wait(watcher, error=<class 'gevent._socketcommon.cancel_wait_ex'>)[源代码]

gevent.hub.Hub.cancel_wait()

Next page: gevent._socket3 --python 3插座模块