如何清理Python中的线程?

2 投票
1 回答
1243 浏览
提问于 2025-04-16 09:51

我正在尝试用Python搭建一个非常简单的UDP套接字服务器,它可以接受异步连接。其实我之前没怎么用过Python,但我从网上了解到这个语言很不错,所以这次测试我就选择了它。

我在参考这里的例子:

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

我已经成功地把它运行成一个UDP服务器(虽然例子是TCP的),只做了很少的修改,所以几乎和那个例子一模一样。唯一让我困惑的是,它每次连接都会创建新的线程。

我可能只是对线程的概念理解得不太对,所以才在这里提问,但难道它不应该清理掉未使用的线程并重复利用吗?还是说它其实已经在这么做,只是有一个递增的计数器在显示数量,我不需要太在意?

所以,简单来说,按照这个例子,我可以安全地让它运行几个小时,处理成千上万的连接(不是同时的,而是随着时间的推移)而不会出现问题吗?还是说它会启动成千上万的线程,导致它们停留的时间比应该的要长得多?

谢谢

1 个回答

6

不需要使用线程。应该使用真正的异步输入输出(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()

撰写回答