開發記錄 事件驅動中一種優雅的退出方法

2021-09-08 17:12:46 字數 1174 閱讀 3875

在看tornado和nginx**的時候都會看到在最初事件反應堆初始化的時候都會自初始化乙個事件,建立乙個管道pipe並繫結到事件佇列中。

這樣的好處是可以優雅的在父程序中向管道pipe[0]傳送退出或者其他訊號,子程序監聽到pipe[1]有事件產生後採取相應的措施。

class waker(inte***ce.waker):

def __init__(self):

r, w = os.pipe()

_set_nonblocking(r)

_set_nonblocking(w)

set_close_exec(r)

set_close_exec(w)

self.reader = os.fdopen(r, "rb", 0)

self.writer = os.fdopen(w, "wb", 0)

def fileno(self):

return self.reader.fileno()

def write_fileno(self):

return self.writer.fileno()

def wake(self):

try:

self.writer.write(b"x")

except ioerror:

pass

def consume(self):

try:

while true:

result = self.reader.read()

if not result:

break

except ioerror:

pass

def close(self):

self.reader.close()

self.writer.close()

以上是tornado中對管道的包裝,其作用是建立管道,並將這個物件作為乙個事件註冊到反應堆中,用於子程序idle(由於沒有事件加上一些訊號被遮蔽,程序處於epoll系統呼叫中)

的時候喚醒子程序、

Linux rpc結構 一種事件驅動的狀態機處理

linux的rpc是作為nfs的底層支援介面放在核心中的。當然,需要的話,其他模組也能呼叫rpc介面。為了高效的排程各個rpc請求,linux的prc排程實際上是乙個事件驅動模型。c s結構,大多使用多程序服務模型,這種模型的優點是程式設計簡單,因為作業系統都是基於程序排程的,可以直接使用作業系統的...

Jmeter分離登入事務的另一種方式

情景如下 通常的做法是使用jmeter對登入和充值的介面進行反覆的執行 但是實現的方法卻不能完美的貼合業務流程。並且,在進行壓測的時候,總不可能把登入介面也一起壓了吧,因此,就需要用到jmeter的邏輯控制器了。邏輯控制器 那啥是邏輯控制器呢?jmeter官網對邏輯控制的解釋是 logic cont...

Jmeter分離登入事務的另一種方式

最近,遇到了乙個困擾很多人的問題。情景如下 通常的做法是使用jmeter對登入和充值的介面進行反覆的執行 但是實現的方法卻不能完美的貼合業務流程。並且,在進行壓測的時候,總不可能把登入介面也一起壓了吧,因此,就需要用到jmeter的邏輯控制器了。邏輯控制器 那啥是邏輯控制器呢?jmeter官網對邏輯...