Skip to main content

tornado.process —多个进程的实用程序

用于处理多个进程的实用程序,包括将服务器分成多个进程和管理子进程。

exception tornado.process.CalledProcessError[源代码]

subprocess.CalledProcessError 的别名。

tornado.process.cpu_count()[源代码]

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

tornado.process.fork_processes(num_processes, max_restarts=100)[源代码]

启动多个工作进程。

如果 num_processes 为None或<= 0,我们检测此机器上可用的核心数,并分叉子进程数。如果给定 num_processes 并且> 0,则分叉该特定数量的子过程。

因为我们使用进程而不是线程,所以在任何服务器代码之间没有共享内存。

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

在每个子进程中,fork_processes 返回其 任务ID,一个介于0和 num_processes 之间的数字。异常退出(由于信号或非零退出状态)的进程以相同的ID(最多 max_restarts 次)重新启动。在父进程中,如果所有子进程已正常退出,fork_processes 将返回None,否则只会通过抛出异常退出。

tornado.process.task_id()[源代码]

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

如果此过程不是由 fork_processes 创建,则返回None。

class tornado.process.Subprocess(*args, **kwargs)[源代码]

subprocess.Popen 与IOStream支持包装在一起。

构造函数与 subprocess.Popen 相同,具有以下添加:

  • stdinstdoutstderr 可以具有值 tornado.process.Subprocess.STREAM,这将使得到的子过程的相应属性为 PipeIOStream

  • 新的关键字参数 io_loop 可以用于传递IOLoop。

Subprocess.STREAM 选项和 set_exit_callbackwait_for_exit 方法在Windows上不起作用。因此,没有理由在该平台上使用此类而不是 subprocess.Popen

在 4.1 版更改: io_loop 参数已弃用。

set_exit_callback(callback)[源代码]

此过程退出时运行 callback

回调需要一个参数,即进程的返回码。

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

在许多情况下,如果信号处理程序引起问题,可以使用stdout或stderr流的close回调作为退出回调的替代。

wait_for_exit(raise_error=True)[源代码]

返回 Future,当进程退出时解析。

用法:

ret = yield proc.wait_for_exit()

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

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

4.2 新版功能.

classmethod initialize(io_loop=None)[源代码]

初始化 SIGCHLD 处理程序。

信号处理程序在 IOLoop 上运行以避免锁定问题。请注意,用于信号处理的 IOLoop 不需要与各个子过程对象使用的相同(只要 IOLoops 都在不同的线程中运行)。

在 4.1 版更改: io_loop 参数已弃用。

classmethod uninitialize()[源代码]

删除 SIGCHLD 处理程序。