2010-08-06 75 views

回答

1

如果我正確理解Twisted Reactors,它們不會並行化所有內容。無論排隊的操作是什麼,都要一一完成。

你的一個出路是自定義addCallback,它會檢查已經註冊了多少個回調,並在必要時刪除。

1

我會處理這每協議。當實際的服務需要時,進行節流,而不是當你認爲會。我不擔心有多少回調函數等待反應堆計時器,我會擔心HTTP請求(例如)需要多長時間才能完成。等待反應堆的操作的數量可能是一個實現細節 - 例如,如果一個訪問模式以長DeferredLists的回調結束,另一個具有更多線性的回調鏈,則響應時間可能不會不同,即使回調的數量是。

這可以通過保持完成邏輯操作的時間度量(例如服務HTTP請求)來完成。這樣做的一個優點是它可以在問題發生之前爲您提供重要信息。

+0

是的,我過去做過的一種方法是檢查響應時間(例如http請求)並在新增連接數增加太多時丟棄新連接。但是這並不完美,因爲在我們檢測到這種情況的時候,已經有數以千計的延期已經堆積起來,所有這些都必須進行處理,從而使反應堆變得更加緩慢。 – Tommy 2010-08-10 07:01:37

+0

當然,如果您想要優雅地降低服務質量,請在您的服務器過於疲憊地做出響應之前做到這一點。我的意見是,等待回調的數量不是你想要監控的,我會監視其他資源(SQL查詢時間,內存,負載,磁盤?),但我仍然會優先考慮請求時間。 Twisted應該能夠輕鬆有效地拒絕您的請求時間過長 - 只記錄未完成請求的數量及其開始時間。或者,在代理中執行此操作,以便您根本不必擔心無響應的服務器。 – 2010-08-11 23:32:13

相關問題