Tornado 多进程的实用程序
用于处理多个进程的实用程序,包括将服务器分为多个进程和管理子进程。
exception tornado.process.CalledProcessError
subprocess.CalledProcessError
的别名。
tornado.process.cpu_count() → int
返回此机器上的处理器数量
tornado.process.fork_processes(num_processes: Optional[int], max_restarts: Optional[int] = None) → int
启动多个工作进程。
如果 num_processes
为 None 或 <= 0,我们会检测这台机器上可用的内核数量并派生该数量的子进程。 如果给定 num_processes
并且 > 0,我们将fork特定数量的子进程。
由于我们使用进程而不是线程,因此任何服务器代码之间都没有共享内存。
请注意,多个进程与 autoreload
模块(或 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]
返回当前任务 ID(如果有)。
如果此进程不是由 fork_processes
创建的,则返回 None
。
class tornado.process.Subprocess(*args, **kwargs)
使用 IOStream
包装 subprocess.Popen
。
构造函数与 subprocess.Popen
相同,但添加了以下内容:
stdin
、stdout
和 stderr
可能具有值 tornado.process.Subprocess.STREAM
,这将使生成的 Subprocess
的相应属性成为 PipeIOStream
。 如果使用此选项,调用者负责在完成Stream时关闭Stream。
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
此进程退出时运行回调。
回调接受一个参数,即进程的返回码。
此方法使用 SIGCHLD
处理程序,这是一个全局设置,如果您有其他库尝试处理相同的信号,则可能会发生冲突。 如果您使用多个 IOLoop
,则可能需要先调用 Subprocess.initialize
以指定一个 IOLoop
来运行信号处理程序。
在许多情况下,如果信号处理程序导致问题,则可以使用 stdout
或 stderr
Stream上的关闭回调作为退出回调的替代方法。
可用性:Unix
wait_for_exit(raise_error: bool = True) → Future[int]
返回一个 Future
,它在进程退出时解析。
用法:
ret = yield proc.wait_for_exit()
这是 set_exit_callback
协程的替代方案(以及阻塞 subprocess.Popen.wait
的替代方案)。
默认情况下,如果进程具有非零退出状态,则引发 subprocess.CalledProcessError
。 使用 wait_for_exit(raise_error=False)
抑制此行为并返回退出状态而不引发。
4.2 版中的新功能。
可用性:Unix
classmethod initialize() → None
初始化 SIGCHLD
处理程序。
信号处理程序在 IOLoop
上运行以避免锁定问题。 请注意,用于信号处理的 IOLoop
不必与各个 Subprocess
对象使用的相同(只要 IOLoop
都在单独的线程中运行)。
在 5.0 版中更改: io_loop
参数(自 4.1 版以来已弃用)已被删除。
可用性:Unix
classmethod uninitialize() → None
删除 SIGCHLD
处理程序。