gevent.socket
--低层协同组网接口¶此模块提供套接字操作和一些相关功能。函数和类的API与标准中相应项的API匹配 socket
模块完全正确,但此模块中的同步功能只会阻塞当前greenlet并让其他模块运行。
小技巧
与大多数gevent对象一样,gevent的套接字具有线程关联性。也就是说,它们只能从创建它们的操作系统线程中使用(该线程中的任何greenlet都可以使用套接字)。尝试在另一个线程中使用套接字的结果(例如,将其传递给threadpool)尚未定义(但一个常见结果是 LoopExit
例外)。
为方便起见,例外情况(如 error
和 timeout
)以及 socket
模块导入到此模块中。在几乎所有情况下,都可以简单地替换 import socket
具有 from gevent import socket
开始使用没有其他更改的协作套接字(或使用 gevent.monkey.patch_socket()
启动时,如果不需要或不可能更改代码)。
此模块公开的确切API因所使用的Python版本而异。下面的文档分别描述了Python2和Python3的API。
注解
所有描述的API都应该从 gevent.socket
和 not 从它们的实现模块。他们的组织是一个可以随时更改的实现细节。
除了基本的标准库接口, 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个打开的套接字。
阻止当前的greenlet,直到 文件描述符 准备好阅读了。
有关其他参数和可能的异常的含义,请参见 wait()
.
阻止当前的greenlet,直到 文件描述符 准备好写了。
有关其他参数和可能的异常的含义,请参见 wait()
.
1.1 版后已移除: 关键字参数 事件 被忽略。应用程序不应传递此参数。将来,这样做将成为一个错误。
阻止当前的greenlet,直到 文件描述符 准备好读或写。
有关其他参数和可能的异常的含义,请参见 wait()
.
1.1 版后已移除: 关键字参数 事件 被忽略。应用程序不应传递此参数。将来,这样做将成为一个错误。
阻止当前的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 -- 如果 观察者 已启动。
Next page: gevent._socket3
--python 3插座模块