2009-10-20 101 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),以便在主进程退出时退出线程。