Tornado 多進程的實用程序

2022-03-10 15:26 更新

用于處理多個進程的實用程序,包括將服務(wù)器分為多個進程和管理子進程。

exception tornado.process.CalledProcessError

?subprocess.CalledProcessError? 的別名。

tornado.process.cpu_count() → int

返回此機器上的處理器數(shù)量

tornado.process.fork_processes(num_processes: Optional[int], max_restarts: Optional[int] = None) → int

啟動多個工作進程。

如果 ?num_processes為 None 或 <= 0,我們會檢測這臺機器上可用的內(nèi)核數(shù)量并派生該數(shù)量的子進程。 如果給定 ?num_processes并且 > 0,我們將fork特定數(shù)量的子進程。

由于我們使用進程而不是線程,因此任何服務(wù)器代碼之間都沒有共享內(nèi)存。

請注意,多個進程與 ?autoreload模塊(或 ?tornado.web.Application? 的 ?autoreload=True? 選項,當 ?debug=True? 時默認為 ?True?)不兼容。 當使用多個進程時,在調(diào)用 ?fork_processes? 之前不能創(chuàng)建或引用任何 ?IOLoop?。

在每個子進程中,?fork_processes? 返回其任務(wù) ID,一個介于 0 和 ?num_processes? 之間的數(shù)字。 異常退出的進程(由于信號或非零退出狀態(tài))以相同的 id 重新啟動(最多 max_restarts 次)。 在父進程中,?fork_processes? 在所有子進程正常退出后調(diào)用 ?sys.exit(0)?。

?max_restarts默認為 100。

可用性:?Unix?

tornado.process.task_id() → Optional[int]

返回當前任務(wù) ID(如果有)。

如果此進程不是由 ?fork_processes創(chuàng)建的,則返回 ?None?。

class tornado.process.Subprocess(*args, **kwargs)

使用 ?IOStream包裝 ?subprocess.Popen?。

構(gòu)造函數(shù)與 ?subprocess.Popen? 相同,但添加了以下內(nèi)容:

?stdin?、?stdout和 ?stderr可能具有值 ?tornado.process.Subprocess.STREAM?,這將使生成的 ?Subprocess的相應(yīng)屬性成為 ?PipeIOStream?。 如果使用此選項,調(diào)用者負責在完成Stream時關(guān)閉Stream。

?Subprocess.STREAM? 選項以及 ?set_exit_callback? 和 ?wait_for_exit? 方法在 Windows 上不起作用。 因此,沒有理由在該平臺上使用此類而不是 ?subprocess.Popen?。

在 5.0 版中更改: ?io_loop參數(shù)(自 4.1 版以來已棄用)已被刪除。

set_exit_callback(callback: Callable[[int], None]) → None

此進程退出時運行回調(diào)。

回調(diào)接受一個參數(shù),即進程的返回碼。

此方法使用 ?SIGCHLD處理程序,這是一個全局設(shè)置,如果您有其他庫嘗試處理相同的信號,則可能會發(fā)生沖突。 如果您使用多個 ?IOLoop?,則可能需要先調(diào)用 ?Subprocess.initialize? 以指定一個 ?IOLoop? 來運行信號處理程序。

在許多情況下,如果信號處理程序?qū)е聠栴},則可以使用 ?stdout ?或 ?stderrStream上的關(guān)閉回調(diào)作為退出回調(diào)的替代方法。

可用性:?Unix?

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

返回一個 ?Future,它在進程退出時解析。

用法:

ret = yield proc.wait_for_exit()

這是 ?set_exit_callback ?協(xié)程的替代方案(以及阻塞 ?subprocess.Popen.wait? 的替代方案)。

默認情況下,如果進程具有非零退出狀態(tài),則引發(fā) ?subprocess.CalledProcessError?。 使用 ?wait_for_exit(raise_error=False)? 抑制此行為并返回退出狀態(tài)而不引發(fā)。

4.2 版中的新功能。

可用性:?Unix?

classmethod initialize() → None

初始化 ?SIGCHLD處理程序。

信號處理程序在 ?IOLoop上運行以避免鎖定問題。 請注意,用于信號處理的 ?IOLoop不必與各個 ?Subprocess對象使用的相同(只要 ?IOLoop都在單獨的線程中運行)。

在 5.0 版中更改: ?io_loop參數(shù)(自 4.1 版以來已棄用)已被刪除。

可用性:?Unix?

classmethod uninitialize() → None

刪除 ?SIGCHLD ?處理程序。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號