在python中清除线程?

时间:2011-01-12 19:33:09

标签: python multithreading asynchronous

我正在尝试使用python建立一个非常简单的UDP套接字服务器,它接受异步连接。现在我从来没有使用过很多Python,但是我从我读过的内容中喜欢这个语言,这就是为什么我在这个测试中使用它。

我遵循这里给出的例子:

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

我已经成功运行它作为UDP服务器(例如TCP),只需很少的修改,因此它几乎与该示例中的完全相同。我唯一没有得到的是它不断为每个连接创建新线程。

现在我可能只是错过理解线程的概念,这就是为什么我在这里问我的问题,但不应该清理未使用的线程并重新使用它们?或者它是否已经这样做,它只是一个增量计数器,表明我不应该太在意的数字?

所以基本上,通过给定的示例,我可以安全地运行此(作为测试)数小时结束,有数千个连接(不是同时,但随着时间的推移)没有任何问题或将启动成千上万的线程徘徊的时间比他们应该的还要长?

由于

1 个答案:

答案 0 :(得分:6)

不需要线程。使用真正的异步IO。它扩展得更好。等待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()