在前兩個文章中整理了關于BaseServer部分以及BaseRequestHandler,以及通過對TCP的處理的流程的整理,這次整理的是剩下的關于用于擴充的部分,這裡通過對線程擴充進行整理
ThreadingMixIn
ThreadingMixIn 類實作了多線程的方式,它隻有兩個方法,分别是process_request和 process_request_thread方法。
process_request
源碼内容如下:
def process_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方法。
process_request_thread
def process_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
到此為止基本的源碼是過了一遍,剩下一個關于程序的擴充部分還沒有看
所有的努力都值得期許,每一份夢想都應該灌溉!