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()
在出口处。- init_socket()[源代码]#
如果用户使用地址而不是套接字初始化服务器,则此函数必须创建一个套接字,绑定它,并将其置于侦听模式。
它不应该由用户调用,而是由
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()中等待客户端连接关闭的默认超时。