用于处理多个进程的实用程序,包括将服务器分为多个进程和管理子进程。
subprocess.CalledProcessError 的别名。
返回此机器上的处理器数量
启动多个工作进程。
如果 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
返回当前任务 ID(如果有)。
如果此进程不是由 fork_processes创建的,则返回 None。
使用 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 版以来已弃用)已被删除。
此进程退出时运行回调。
回调接受一个参数,即进程的返回码。
此方法使用 SIGCHLD处理程序,这是一个全局设置,如果您有其他库尝试处理相同的信号,则可能会发生冲突。 如果您使用多个 IOLoop,则可能需要先调用 Subprocess.initialize 以指定一个 IOLoop 来运行信号处理程序。
在许多情况下,如果信号处理程序导致问题,则可以使用 stdout 或 stderrStream上的关闭回调作为退出回调的替代方法。
可用性:Unix
返回一个 Future,它在进程退出时解析。
用法:
ret = yield proc.wait_for_exit()
这是 set_exit_callback 协程的替代方案(以及阻塞 subprocess.Popen.wait 的替代方案)。
默认情况下,如果进程具有非零退出状态,则引发 subprocess.CalledProcessError。 使用 wait_for_exit(raise_error=False) 抑制此行为并返回退出状态而不引发。
4.2 版中的新功能。
可用性:Unix
初始化 SIGCHLD处理程序。
信号处理程序在 IOLoop上运行以避免锁定问题。 请注意,用于信号处理的 IOLoop不必与各个 Subprocess对象使用的相同(只要 IOLoop都在单独的线程中运行)。
在 5.0 版中更改: io_loop参数(自 4.1 版以来已弃用)已被删除。
可用性:Unix
删除 SIGCHLD 处理程序。