Tornado 多進(jìn)程的實(shí)用程序

2022-03-10 15:26 更新

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

exception tornado.process.CalledProcessError

?subprocess.CalledProcessError? 的別名。

tornado.process.cpu_count() → int

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

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

啟動(dòng)多個(gè)工作進(jìn)程。

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

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

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

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

?max_restarts默認(rèn)為 100。

可用性:?Unix?

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

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

如果此進(jìn)程不是由 ?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?。 如果使用此選項(xiàng),調(diào)用者負(fù)責(zé)在完成Stream時(shí)關(guān)閉Stream。

?Subprocess.STREAM? 選項(xiàng)以及 ?set_exit_callback? 和 ?wait_for_exit? 方法在 Windows 上不起作用。 因此,沒(méi)有理由在該平臺(tái)上使用此類而不是 ?subprocess.Popen?。

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

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

此進(jìn)程退出時(shí)運(yùn)行回調(diào)。

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

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

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

可用性:?Unix?

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

返回一個(gè) ?Future,它在進(jìn)程退出時(shí)解析。

用法:

ret = yield proc.wait_for_exit()

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

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

4.2 版中的新功能。

可用性:?Unix?

classmethod initialize() → None

初始化 ?SIGCHLD處理程序。

信號(hào)處理程序在 ?IOLoop上運(yùn)行以避免鎖定問(wèn)題。 請(qǐng)注意,用于信號(hào)處理的 ?IOLoop不必與各個(gè) ?Subprocess對(duì)象使用的相同(只要 ?IOLoop都在單獨(dú)的線程中運(yùn)行)。

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

可用性:?Unix?

classmethod uninitialize() → None

刪除 ?SIGCHLD ?處理程序。


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)