cherrypy.process.wspbus模块

网站进程总线的一种实现。

此模块完全独立,仅取决于stdlib。

网站进程总线

总线对象用于包含和管理站点范围的行为:后台监控、HTTP服务器启动/停止、进程重新加载、信号处理、删除权限、PID文件管理、所有这些的日志记录等等。

此外,总线对象为每个Web框架提供了一个注册代码的位置,这些代码响应站点范围的事件(如进程启动和停止),或者控制或以其他方式与上面提到的站点范围的组件交互。例如,使用基于文件的模板的框架将向自动加载组件添加已知的模板文件名。

理想情况下,总线对象将足够灵活,能够在各种调用场景中发挥作用:

  1. 部署程序通过与框架无关的部署脚本从命令行启动一个站点;来自多个框架的应用程序混合在一个站点中。命令行参数和配置文件用于定义站点范围的组件,如HTTP服务器、WSGi组件图、自动加载行为、信号处理等。

  2. 部署程序通过其他进程(如Apache)启动站点;来自多个框架的应用程序混合在一个站点中。自动加载和信号处理(至少从python)被禁用。

  3. 部署程序通过特定于框架的机制启动站点;例如,在运行测试、浏览教程或从单个框架部署单个应用程序时。框架控制在其认为合适的情况下启用哪些站点范围的组件。

此包中的总线对象使用基于主题的发布-订阅消息来完成所有这一切。一些主题频道内置(“开始”、“停止”、“退出”、“优雅”、“日志”和“主要”)。框架和站点容器可以自由定义自己的框架和站点容器。如果消息发送到尚未定义或没有侦听器的通道,则没有效果。

一般来说,每个进程应该只有一个总线对象。框架和站点容器通过发布消息和订阅侦听器共享单个总线对象。

总线对象作为一个有限状态机工作,对进程的当前状态进行建模。总线方法将其从一种状态移动到另一种状态;然后,这些方法将发布到新状态的通道上订阅的侦听器。::

                 O
                 |
                 V
STOPPING --> STOPPED --> EXITING -> X
   A   A         |
   |    \___     |
   |        \    |
   |         V   V
 STARTED <-- STARTING
class cherrypy.process.wspbus.Bus[源代码]

基类:object

处理HTTP站点部署的状态机和信使。

即使同一个频道的其他人失败,也保证调用给定频道的所有侦听器。每个失败都会被记录下来,但执行会继续到下一个侦听器。从监听器内部停止所有处理的唯一方法是提高SystemExit并停止整个服务器。

_clean_exit()[源代码]

在atexit处理程序回调中断言总线没有运行。

_do_execv()[源代码]

重新执行当前进程。

这必须从主线程调用,因为某些平台(OSX)不允许在子线程中很好地调用execv。

static _extend_pythonpath(env)[源代码]

如果需要,将当前工作目录附加到PATH环境变量。

如果sys.path [0] 是空字符串,则解释器可能是使用-m调用的,并且有效路径将在重新执行时更改。将当前目录添加到$PYTHONPATH,以确保新进程看到相同的路径。

一般情况下无法解决此问题,因为Python无法可靠地重新构建原始命令行(http://bugs.python.org/issue14208).

(这个想法摘自tornado.autoreload)

static _get_interpreter_argv()[源代码]

检索当前Python解释器的参数。

如果是冻结模式,则返回空元组,否则使用内置参数复制函数。

冻结模式是可能的,因为该应用程序已打包成使用py2exe的二进制可执行文件。在本例中,解释器的参数已经内置到该可执行文件中。

另见

https://github.com/cherrypy/cherrypy/issues/1526

参考:https://pythonhosted.org/PyInstaller/runtime-information.html

static _get_true_argv()[源代码]

检索python解释器的所有实参。

.甚至那些没有列在 sys.argv

另见

http://stackoverflow.com/a/28338254/595220

另见

http://stackoverflow.com/a/6683222/595220

另见

http://stackoverflow.com/a/28414807/595220

_set_cloexec()[源代码]

在所有打开的文件(除stdin/out/err之外)上设置CLOEXEC标志。

如果self.max_cloexec_files为整数(默认值),则在支持它的平台上,它表示操作系统的最大打开文件数设置。此函数将在进程重新启动之前通过os.execv()调用,以防止打开的文件持久保存到新进程中。

将self.max_cloexec_files设置为0可禁用此行为。

block(interval=0.1)[源代码]

等待退出状态、键盘中断或系统退出。

此函数只能由主线程调用。在等待退出状态之后,它还等待所有线程终止,然后如果self.execv为true,则调用os.execv。这种设计允许另一个线程调用bus.restart,但是让主线程执行实际的execv调用(在某些平台上是必需的)。

execv = False
exit()[源代码]

停止所有服务并准备退出进程。

graceful()[源代码]

建议所有服务重新加载。

log(msg='', level=20, traceback=False)[源代码]

记录给定的消息。如果请求,追加最后一个回溯。

max_cloexec_files = 65535
publish(channel, *args, **kwargs)[源代码]

返回给定通道的所有订阅服务器的输出。

restart()[源代码]

重新启动进程(可能会关闭连接)。

此方法不会从调用线程重新启动进程;相反,它会停止总线并请求主线程调用execv。

start()[源代码]

启动所有服务。

start_with_callback(func, args=None, kwargs=None)[源代码]

在新线程t中启动“func”,然后启动self(并返回t)。

state = states.STOPPED
states = <cherrypy.process.wspbus._StateEnum object>
stop()[源代码]

停止所有服务。

subscribe(channel, callback=None, priority=None)[源代码]

在给定通道添加给定回调(如果不存在)。

如果回调为“无”,则返回适合修饰回调的部分。

unsubscribe(channel, callback)[源代码]

丢弃给定的回调(如果存在)。

wait(state, interval=0.1, channel=None)[源代码]

定期轮询给定状态;发布到频道。

exception cherrypy.process.wspbus.ChannelFailures(*args, **kwargs)[源代码]

基类:Exception

在Bus.Publish()上的错误期间引发异常。

delimiter = '\n'
get_instances()[源代码]

返回所见异常实例的列表。

handle_exception()[源代码]

将当前异常附加到self。

class cherrypy.process.wspbus._StateEnum[源代码]

基类:object

class State[源代码]

基类:object

name = None