2009-10-20 104 views
0

你們中有些使用扭曲更有經驗的人可能會判斷我與線程一起使用它 - 但我做到了:)。現在我在某種程度上遇到了麻煩 - 我有一個應用程序服務器來監聽客戶端請求,每次有新客戶端連接時都會產生另一個線程,我可能會忘記正確關閉該線程,因爲經過一段時間的大量使用後服務器會停止處理請求。那麼,我有3種不同類型的線程,其中發生的其中之一 - 事情是,我不知道什麼是正確的方式來做到這一點,因爲Thread.join()似乎不工作,並做cat /proc/<pid>/status它總是給我Threads: 43當服務器停止工作。扭曲和線程問題

所以我正在尋找一種方法來調試這個,看看我該如何正確關閉線程。

,是的,我知道這個問題:

Is there any way to kill a Thread in Python?

,可能許多人。

回答

4

「扭曲的方式」做任何反應器循環外(也就是產卵線程)是twisted.internet.threads.deferToThread。

例如:

from twisted.internet import threads 

def sthToDoInSeparateThread(): 
    return 3 

d = threads.deferToThread(sthToDoInSeparateThread) 

deferToThread將在單獨的線程,並返回儘快線程停止延遲執行丁火執行sthToDoInSeparateThread。

+0

'deferToThread'實際上使用了一個線程池。所以當'sthToDoInSeparateThread'返回(或引發一個異常)時,返回的Deferred會觸發,但它所運行的線程並不會停止,而是繼續運行下一個函數。 – 2009-11-06 22:09:49

0

您可能只想執行mythread.setDaemon(True),以便在主進程退出時退出線程。