簡體   English   中英

Python扭曲Reactor類

[英]Python twisted Reactor class

裝飾者的意義是什么

 @reactor.callWhenRunning,
 @results_deferred.addCallback
 @results_deferred.addErrback.

還有什么是延遲字符串,例如在

 twisted.internet.utils.getProcessOutput()

返回一個延遲的字符串,這里到底發生了什么?

我是新手,所以這可能是一個非常簡單的問題,但是閱讀扭曲的文檔並沒有太大幫助

在正常的編程實踐中,您會

db = Database.connect()
result = db.getResult()
processResult(result)

現在,取決於您的數據庫和網絡,這3條語句可能花費一毫秒到幾秒鍾的時間。

數十年來,我們所有人都一直在以這種方式進行編程,在大多數情況下,我們對“等待”表示滿意。

但是有時候您的程序不能只等待結果。 您會開始思考,在我等待結果的同時,我還可以做很多其他事情。 也許打印輸出,或處理功能,或只是快速檢查插座等。

輸入扭曲和延遲。

不必等待result ,在Twisted中調用特殊方法時,您將獲得Deferred 您將為此延遲添加一個回調函數,這意味着在獲得結果/答案時調用此函數。

deferredResult = db.nonBlockingGetResult()
deferredResult.addCallback(processOutput)

一旦執行第一條語句,它將返回“某物”。 而且那是Deferred事情。 那里沒有障礙,沒有等待。 並向此Deferred添加回調processOutput ,當deferred被“激發”時即被調用,即result准備就緒。

高溫超導

延期就像對將來返回輸出的承諾一樣。 您確實應該在此處此處閱讀有關Deferreds的文檔。 另外,您通常應該閱讀Python裝飾器。 這里是一個介紹。

更具體地說,正在發生的事情是,當您調用getProcessOutput()時,結果還沒有准備好。 它可能會在瞬間或一個小時內准備就緒。 但是您可能並不在意:只要准備好了,您可能想獲取輸出並將其傳遞給函數。 因此,getProcessOutput返回一個延遲的對象,而不是返回輸出(不會立即准備好輸出)。 當輸出最終准備就緒時,延遲的對象將注意到並調用您提供的任何處理功能,並傳遞實際的過程輸出數據。 不過,您確實應該閱讀有關延期的內容。

我不確定python,但這看起來像Active object模式和Futures。 在下一個c ++版本中,期貨將成為標准。 如果您通讀Active對象和Futures,您將了解

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM