tornado.process — Utilities for multiple processes

用于处理多个流程的实用程序,包括将服务器分叉到多个流程和管理子流程.

exception tornado.process.CalledProcessError[source]

subprocess.CalledProcessError的别名.

exception tornado.process.CalledProcessError(returncode, cmd, output=None, stderr=None)[source]

在使用check = True调用run()且进程返回非零退出状态时引发.

Attributes:

cmd,返回码,stdout,stderr,输出

property stdout

输出属性的别名,以匹配stderr

tornado.process.cpu_count() → int[source]

返回此计算机上的处理器数量.

tornado.process.fork_processes(num_processes: Optional[int], max_restarts: int = None) → int[source]

启动多个工作进程.

如果num_processes为None或<= 0,我们将检测此计算机上可用的内核数,并派生该数量的子进程. 如果给定num_processes且> 0,则我们分叉该特定数量的子进程.

由于我们使用进程而不是线程,因此任何服务器代码之间都没有共享内存.

请注意,多个进程与autoreload模块不兼容(或tornado.web.Applicationautoreload=True选项,当debug=True时默认为debug=True ). 使用多个进程时,直到调用fork_processes之后,才能创建或引用fork_processes .

在每个子进程中, fork_processes返回其任务ID ,即介于0和num_processes之间的数字. 异常退出(由于信号或退出状态为非零)的进程将使用相同的ID(最多max_restarts次)重新启动. 在父进程中,如果所有子进程都正常退出,则fork_processes返回None,否则将仅通过引发异常退出.

max_restarts默认为100.

tornado.process.task_id() → Optional[int][source]

返回当前任务ID(如果有).

如果此进程不是由fork_processes创建的,则返回None.

class tornado.process.Subprocess(*args, **kwargs)[source]

包装subprocess.Popen进程subprocess.Popen具有IOStream支持.

The constructor is the same as subprocess.Popen with the following additions:

  • stdinstdoutstderr的值可能为tornado.process.Subprocess.STREAM ,这将使生成的Subprocess的相应属性成为PipeIOStream . 如果使用此选项,则调用者负责在完成处理后关闭流.

Subprocess.STREAM选项以及set_exit_callbackwait_for_exit方法在Windows上不起作用. 因此,没有理由在该平台上使用此类代替subprocess.Popen .

在5.0版中进行了更改: io_loop参数(从4.1版弃用)已被删除.

set_exit_callback(callback: Callable[[int], None]) → None[source]

该进程退出时运行callback .

回调采用一个参数,即进程的返回码.

此方法使用SIGCHLD处理程序,该处理程序是全局设置,如果您有其他库尝试处理同一信号,则可能会发生冲突. 如果使用多个IOLoop则可能有必要先调用Subprocess.initialize来指定一个IOLoop以运行信号处理程序.

在许多情况下,如果信号处理程序引起问题,则可以将stdout或stderr流上的close回调用作退出回调的替代方法.

wait_for_exit(raise_error: bool = True) → Future[int][source]

返回一个Future ,当流程退出时解析.

Usage:

ret = yield proc.wait_for_exit()

这是一个协程友好替代set_exit_callback (和阻塞的替代subprocess.Popen.wait ).

默认情况下,如果进程的退出状态为非零,则引发subprocess.CalledProcessError . 使用wait_for_exit(raise_error=False)抑制此行为,并返回退出状态而不提高.

4.2版中的新功能.

classmethod initialize() → None[source]

初始化SIGCHLD处理程序.

信号处理程序在IOLoop上运行,以避免锁定问题. 请注意,用于信号处理的IOLoop不必与单个Subprocess对象使用的IOLoop相同(只要IOLoops每个都在单独的线程中运行).

在5.0版中进行了更改: io_loop参数(从4.1版弃用)已被删除.

classmethod uninitialize() → None[source]

删除SIGCHLD处理程序.