tornado.process — 多进程实用工具¶
用于处理多个进程的实用工具,包括将服务器分叉到多个进程和管理子进程。
- tornado.process.fork_processes(num_processes: Optional[int], max_restarts: Optional[int] = None) int[source]¶
启动多个工作进程。
如果
num_processes为 None 或 <= 0,我们将检测此机器上可用的核心数量并分叉该数量的子进程。如果num_processes被给出且 > 0,我们将分叉该特定数量的子进程。由于我们使用进程而不是线程,因此任何服务器代码之间没有共享内存。
请注意,多个进程与自动重新加载模块(或
tornado.web.Application的autoreload=True选项,该选项在debug=True时默认设置为 True)不兼容。使用多个进程时,在调用fork_processes之前,不能创建或引用任何 IOLoop。在每个子进程中,
fork_processes返回其任务 ID,一个介于 0 和num_processes之间的数字。异常退出(由于信号或非零退出状态)的进程将使用相同的 ID 重新启动(最多max_restarts次)。在父进程中,fork_processes在所有子进程正常退出后调用sys.exit(0)。max_restarts 默认值为 100。
可用性:Unix
- tornado.process.task_id() Optional[int][source]¶
返回当前任务 ID(如果有)。
如果此进程不是由
fork_processes创建的,则返回 None。
- class tornado.process.Subprocess(*args: Any, **kwargs: Any)[source]¶
用 IOStream 支持包装
subprocess.Popen。构造函数与
subprocess.Popen相同,但有以下附加内容stdin、stdout和stderr可能具有值tornado.process.Subprocess.STREAM,这将使结果 Subprocess 的相应属性成为PipeIOStream。如果使用此选项,调用者负责在完成使用流后关闭流。
Subprocess.STREAM选项以及set_exit_callback和wait_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 流上的关闭回调可以用作退出回调的替代方法,如果信号处理程序导致问题。
可用性:Unix
- wait_for_exit(raise_error: bool = True) Future[int][source]¶
返回一个
Future,该 Future 在进程退出时解析。用法
ret = yield proc.wait_for_exit()
这是一个协程友好的替代方案,用于
set_exit_callback(以及阻塞subprocess.Popen.wait的替代品)。默认情况下,如果进程的退出状态非零,则会引发
subprocess.CalledProcessError。使用wait_for_exit(raise_error=False)来抑制此行为,并返回退出状态而不引发异常。版本 4.2 中的新增功能。
可用性:Unix