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