2016-11-24 72 views
1

我已經看遍了堆棧溢出,我還沒有看到一個問題,直接關係到我想要做什麼。
我目前正在嘗試編寫一個服務器,該服務器在每個查詢上生成一個線程,然後在查詢完成後放棄該線程。我一直在閱讀儘可能多的線程問題,但我發現的唯一答案是提示關閉套接字服務器,我認爲這對我而言並不合適。這個例子只有一個線程,但想象一下它們有n個。它們會在查詢時產生,因爲它們在server_forever上,所以它們基本上是內存泄漏。我是相當新的Python穿線,我我試着初始化線程沒有serve_forever,但我得到以下幾點:如何停止一個套接字serve_forever線程蟒蛇2.7

AttributeError: ThreadingUDPServer instance has no __call__ method 

如何要麼停止serve_forever線程或者我怎麼一個實例線程沒有使用serve_forever,同時保持目標電話我有?我已經閱讀了大部分有關Python指南中的線程的文檔,但是他們中的任何一篇似乎都沒有解決線程上的serve_forever函數。

myController = Controller.Controller() 
servers = [SocketServer.ThreadingUDPServer(('', 53), myController.UDPRequestHandler),] 
thread = threading.Thread(target=servers[0].serve_forever) 
thread.daemon = True 
thread.start() 
print 'UDP server loop running in thread: %s' % (thread.name) 
    try: 
     while 1: 
      time.sleep(1) 
      sys.stderr.flush() 
      sys.stdout.flush() 
+0

爲什麼打電話給'shutdown'是不可接受的?這隻影響每個SocketServer實例。 – Goodies

+0

讓我試試看,我會盡快回復您。根據我的理解,我認爲除了現有的連接之外,它完全關閉了套接字。值得一試。 –

+0

爲什麼你會爲傳入連接產生一個新的套接字服務器?我有點困惑。 – Goodies

回答

0

檢查代碼學習線程我已經認識到,直到守護進程被終止插座保持開放的屬性之後。我在這裏列出的問題已經在處理,因爲線程已被守護進程並可以被程序終止。如果線程沒有被守護進程,那麼它將不會被終止,並且實際上將serve_forever。 Server_shutdown用於在線程停止後幫助清理。