tornado.process — 複数プロセスのユーティリティ

サーバーを複数プロセスにフォークすることと、サブプロセスの管理の両方を含む、複数プロセスを扱うためのユーティリティです。

例外 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 の場合、その特定数のサブプロセスをフォークします。

プロセスを使用しており、スレッドを使用していないため、サーバーコード間には共有メモリがありません。

複数プロセスは、autoreloadモジュール(またはtornado.web.Applicationautoreload=Trueオプション。これはdebug=Trueの場合、デフォルトでTrueになります)と互換性がありません。複数プロセスを使用する場合、fork_processesを呼び出すまで、IOLoopを作成または参照することはできません。

各子プロセスで、fork_processesは、0からnum_processesの間の数である、そのタスクIDを返します。異常終了したプロセス(シグナルまたはゼロ以外の終了ステータスによる)は、同じIDで再起動されます(最大max_restarts回)。親プロセスでは、fork_processesは、すべての子プロセスが正常に終了した後、sys.exit(0)を呼び出します。

max_restarts のデフォルトは 100 です。

利用可能性: Unix

tornado.process.task_id() Optional[int][ソース]

現在のタスクIDを返します(存在する場合)。

このプロセスがfork_processesによって作成されていない場合は、Noneを返します。

クラス tornado.process.Subprocess(*args: Any, **kwargs: Any)[ソース]

IOStreamサポート付きでsubprocess.Popenをラップします。

コンストラクタは、以下の追加事項を除き、subprocess.Popenと同じです。

  • stdinstdout、および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[ソース]

このプロセスが終了したときにcallbackを実行します。

コールバックは、プロセスの戻りコードを1つの引数として受け取ります。

このメソッドはSIGCHLDハンドラーを使用します。これはグローバル設定であり、同じシグナルを処理しようとしている他のライブラリと競合する可能性があります。複数のIOLoopを使用している場合は、シグナルハンドラーを実行するIOLoopを指定するために、最初にSubprocess.initializeを呼び出す必要がある場合があります。

多くの場合、シグナルハンドラーが問題を引き起こしている場合、stdoutまたはstderrストリームのクローズコールバックを終了コールバックの代替として使用できます。

利用可能性: Unix

wait_for_exit(raise_error: bool = True) Future[int][source]

プロセスが終了するまで解決されない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[source]

SIGCHLDハンドラを初期化します。

シグナルハンドラは、ロックの問題を回避するためにIOLoop上で実行されます。IOLoopのシグナル処理に使用されるものは、個々のSubprocessオブジェクトで使用されるものと同じである必要はありません(IOLoopsがそれぞれ別のスレッドで実行されている限り)。

バージョン 5.0 で変更: io_loop引数(バージョン4.1以降非推奨)が削除されました。

利用可能性: Unix

classmethod uninitialize() None[source]

SIGCHLDハンドラを削除します。