在前兩個文章中整理了關於baseserver部分以及baserequesthandler,以及通過對tcp的處理的流程的整理,這次整理的是剩下的關於用於擴充套件的部分,這裡通過對執行緒擴充套件進行整理
threadingmixin 類實現了多執行緒的方式,它只有兩個方法,分別是process_request和 process_request_thread方法。
原始碼內容如下:
defprocess_request_thread(self, request, client_address):
"""same as in baseserver but as a thread.
in addition, exception handling is done here.
"""try
: self.finish_request(request, client_address)
self.shutdown_request(request)
except
: self.handle_error(request, client_address)
self.shutdown_request(request)
process_request方法複寫了父類的此方法。以此為介面入口,對每乙個請求,呼叫thread開啟乙個新的執行緒。每乙個執行緒都繫結process_request_thread方法。
原始碼內容如下:
defprocess_request(self, request, client_address):
"""start a new thread to process the request.
"""t = threading.thread(target =self.process_request_thread,
args =(request, client_address))
t.daemon =self.daemon_threads
t.start()
process_request_thread方法和baseserver裡的parse_request幾乎一樣。只不過是多執行緒的方式呼叫。
使用的時候,通過多繼承呼叫介面,如原始碼中的:
class threadingtcpserver(threadingmixin, tcpserver): pass
到此為止基本的原始碼是過了一遍,剩下乙個關於程序的擴充套件部分還沒有看
socketserver原始碼分析 學習中
那麼我們先看socketserver怎麼用呢,然後在分析,先看下面的 import socketserver 1 引入模組 class myserver socketserver.baserequesthandler 2 自己寫乙個類,類名自己隨便定義,然後繼承socketserver這個模組裡面的...
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...
Cartographer原始碼篇 原始碼分析 1
在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...