2012-07-18 63 views
0

我有一個簡單的問題。Python TCPServer

當我創建使用示例代碼,例如蟒蛇TCPSERVER:

import sys, SocketServer, os 
from multiprocessing import Pool, Queue 

class MyTCPHandler(SocketServer.BaseRequestHandler): 
    def handle(self): 
       # self.request is the TCP socket connected to the client 
       self.data = self.request.recv(1024).strip() 
       print "{} wrote:".format(self.client_address[0]) 
       print self.data 
       # just send back the same data, but upper-cased 
       self.request.sendall(self.data.upper()) 


if __name__ == '__main__': 

    pool = Pool(processes=2) 

    HOST, PORT = "localhost", 9999 
    server = SocketServer.TCPServer((HOST,PORT), MyTCPHandler) 
    server.serve_forever() 

我的問題是:我怎麼能傳遞給函數上的手柄類MyTCPHandler對象池?

感謝

+0

你應該考慮一個更高級別的庫,像扭曲一樣,並且避免處理普通套接字的痛苦。你不會後悔。 – 2012-07-18 16:35:58

回答

1

如果你想有一個多線程TCPServer可以使用ThreadingMixIn混合類是這樣的:在方法一樣使用ForkingMixIn

import SocketServer 

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): 
    pass 

你也可以有一個基於叉TCPSERVER之前。

更多信息可在doc找到。

+0

是的,我想要多線程。但我想控制生成的線程。任何提示我怎麼能做到這一點? – 2012-07-18 16:47:52

+0

@JorgeMachado:你可以檢查「ThreadingMixIn」的代碼(http://hg.python.org/cpython/file/227a22288688/Lib/SocketServer.py#l579),你可以像創建自己的Mixin一樣由標準庫提供並使用它。 – mouad 2012-07-18 16:50:54