Twisted与线程的问题

0 投票
2 回答
1308 浏览
提问于 2025-04-15 15:12

有些使用Twisted比较熟练的朋友可能会对我把它和线程一起用感到不满,但我就是这么做了 :)现在我遇到了一些麻烦——我有一个应用服务器,它负责监听客户端的请求,每当有新客户端连接时,它就会启动一个新的线程。我可能忘了正确关闭这些线程,因为在大量使用一段时间后,服务器就停止处理请求了。其实我有三种不同类型的线程,其中一种出现了问题——问题是我不太确定正确的处理方式,因为Thread.join()似乎不起作用,而当我执行cat /proc/<pid>/status时,总是显示Threads: 43,这说明服务器停止工作时还有很多线程在运行。

所以我在寻找一种调试的方法,看看怎么才能正确关闭这些线程。

对了,我知道有这样一个问题:

在Python中有没有办法杀死一个线程?

还有可能有很多其他类似的问题。

2 个回答

0

你可能只想用 mythread.setDaemon(True) 这样做,这样当主程序结束时,你的线程也会自动退出。

4

要在反应器循环之外做任何事情(也就是启动线程),可以使用 twisted.internet.threads.deferToThread。

举个例子:

from twisted.internet import threads

def sthToDoInSeparateThread():
    return 3

d = threads.deferToThread(sthToDoInSeparateThread)

deferToThread 会在一个单独的线程中执行 sthToDoInSeparateThread,并且一旦这个线程结束,就会立即触发返回的 deferred d。

撰写回答