tornado.process
— 多進程工具¶
用於處理多個進程的工具,包括將伺服器分叉為多個進程和管理子進程。
- tornado.process.fork_processes(num_processes: Optional[int], max_restarts: Optional[int] = None) int [原始碼]¶
啟動多個工作進程。
如果
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] [原始碼]¶
傳回目前的任務 ID(如果有的話)。
如果此進程不是由
fork_processes
建立,則傳回 None。
- class tornado.process.Subprocess(*args: Any, **kwargs: Any)[原始碼]¶
使用 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 [原始碼]¶
當此進程結束時,執行
callback
。回呼接受一個引數,即進程的傳回碼。
此方法使用
SIGCHLD
處理常式,這是一個全域設定,如果您有其他程式庫嘗試處理相同的訊號,可能會發生衝突。如果您使用多個IOLoop
,可能需要先呼叫Subprocess.initialize
,以指定一個IOLoop
來執行訊號處理常式。在許多情況下,stdout 或 stderr 串流上的關閉回呼可以用作結束回呼的替代方案,如果訊號處理常式造成問題。
可用性:Unix
- wait_for_exit(raise_error: bool = True) Future[int] [原始碼]¶
返回一個
Future
,當進程結束時會解析(resolve)。用法
ret = yield proc.wait_for_exit()
這是
set_exit_callback
的一個協程友善替代方案(也是對阻塞式subprocess.Popen.wait
的替代方案)。預設情況下,如果進程的退出狀態為非零,則會引發
subprocess.CalledProcessError
。使用wait_for_exit(raise_error=False)
來抑制此行為並返回退出狀態而不引發錯誤。4.2 版本新增。
可用性:Unix