2011-01-12 76 views
2

我想用python設置一個非常簡單的UDP套接字服務器,它接受異步連接。現在我從來沒有用過很多Python,但是從閱讀過的內容中我很喜歡這門語言,這就是爲什麼我將它用於此測試。在Python中清除線程?

我下面在這裏給出的示例:

http://docs.python.org/library/socketserver.html#asynchronous-mixins

我已經擁有它成功運行一個UDP服務器(例如是TCP),用很少的修改,所以它幾乎完全一樣這個例子。唯一沒有得到的是它不斷爲每個連接創建新線程。

現在我可能只是想理解線程的概念,這就是爲什麼我在這裏問我的問題,但不應該清除未使用的線程並重新使用它們?或者它已經這樣做了,它只是一個增量計數器,表明我不應該太在意的數字?

因此,基本上,在給定的例子中,我可以安全地運行這個(作爲一個測試)幾個小時結束,與成千上萬的連接(不是同時,但隨着時間的推移)沒有任何問題,或者它會啓動成千上萬的線程徘徊遠遠超過他們應該?

謝謝

回答

6

不需要線程。使用真正的異步IO。它的規模好得多。線程等待IO只是增加開銷,沒有性能增益。

from twisted.internet.protocol import DatagramProtocol 
from twisted.internet import reactor 

class Echo(DatagramProtocol): 

    def datagramReceived(self, data, (host, port)): 
     print "received %r from %s:%d" % (data, host, port) 
     self.transport.write(data, (host, port)) 

reactor.listenUDP(9999, Echo()) 
reactor.run() 
+0

在他給出的例子中,線程是模擬不在服務器上的客戶端,所以服務器的可擴展性不相關。 – hhafez 2011-01-12 19:43:31