gevent.baseserver --用于实现服务器的基类#

用于实现服务器的基类

class BaseServer(listener, handle=None, spawn='default')[源代码]#

基类:object

为GEvent中的服务器实现一些公共功能的抽象基类。

参数:
  • listener -- 要么是服务器应该绑定的地址,要么是 gevent.socket.socket 已绑定的实例(如果是TCP套接字,则将其置于侦听模式)。

  • handle -- 如果给定,则为请求处理程序。可以用几种方法定义请求处理程序。通常,子类将实现 handle 方法作为实例方法。或者,函数可以作为 handle 构造函数的参数。在这两种情况下,稍后可以通过调用 set_handle() . 当请求处理程序返回时,用于请求的套接字将关闭。因此,如果套接字仍在使用中(例如,通过手动生成的greenlet),则处理程序不能返回。

  • spawn -- 如果提供,则调用以创建新的greenlet来运行处理程序。默认情况下, gevent.spawn() 使用(意味着对并发请求的数量没有人为限制)。可能的值 产卵 甲: gevent.pool.Pool 实例-- handle 将使用 gevent.pool.Pool.spawn() 只有在泳池没有满的时候。当连接已满时,不接受新连接;- gevent.spawn_raw() —— handle 将在一个未加工的绿叶中执行,该绿叶中的开销将略低于 gevent.Greenlet 默认情况下生成的实例;- None —— handle 将立即执行,在 Hub 格林莱特。 handle 不能使用任何阻塞函数,因为它将意味着切换到 Hub . -整数--的快捷方式 gevent.pool.Pool(integer)

在 1.1a1 版本发生变更: 手柄 函数从处理连接返回,客户端套接字将关闭。这解决了套接字的非确定性关闭问题,修复了python 3和pypy下的resourcewarnings。

在 1.5 版本发生变更: 现在是一个上下文管理器,它返回自身并调用 stop() 在出口处。

close()[源代码]#

关闭侦听器套接字并停止接受。

init_socket()[源代码]#

如果用户使用地址而不是套接字初始化服务器,则此函数必须创建一个套接字,绑定它,并将其置于侦听模式。

它不应该由用户调用,而是由 start() 在开始接受循环之前。

serve_forever(stop_timeout=None)[源代码]#

如果服务器还没有启动,请启动它,然后等待它停止。

start()[源代码]#

开始接受连接。

如果在构造函数中提供了一个地址,那么还要创建一个套接字,绑定它并将其放入侦听模式。

stop(timeout=None)[源代码]#

停止接受连接并关闭监听插座。

如果服务器使用池生成请求,则 stop() 同时等待所有处理程序退出。如果在之后仍有处理程序执行 超时 已过期(默认1秒, stop_timeout ,然后终止池中当前正在运行的处理程序。

如果服务器不使用池,那么这只会停止接受连接;任何生成的处理请求的greenlet都会继续运行,直到它们自然完成。

max_accept = 100#

设置进程在单个唤醒时可以执行的最大连续接受数。高值为高连接速率提供了更高的优先级,而较低的值为已建立的连接提供了更高的优先级。默认值为100。

请注意,如果同一侦听套接字上有多个工作进程,则应将其设置为较低的值。(pywsgi.WSGIServer设置为1时 environ["wsgi.multiprocess"] 是真的)

这相当于libuv的 uv_tcp_simultaneous_accepts 价值观。将环境变量UV_TCP_SINGLE_ACCEPT设置为真值(通常为1),会将默认值更改为1(仅在libuv中;这不会影响gevent)。

min_delay = 0.01#

如果连续错误的accept()调用中出现错误,则休眠的秒数将加倍,直到达到最大延迟。当accept()最终成功时,延迟将再次重置为最小延迟。

property server_host#

服务器绑定到的IP地址(字符串)。

property server_port#

服务器绑定到的端口(整数)。

stop_timeout = 1#

在stop()中等待客户端连接关闭的默认超时。