Очистить темы в питоне? - PullRequest
       17

Очистить темы в питоне?

2 голосов
/ 12 января 2011

Я пытаюсь настроить очень простой сервер сокетов UDP с питоном, который принимает асинхронные соединения.Сейчас я никогда раньше не использовал Python, но мне очень нравится язык из того, что я о нем читал, поэтому я использую его для этого теста.

Я следую приведенному здесь примеру:

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

Я уже успешно работал как сервер UDP (пример - TCP), с очень небольшим количеством модификаций, поэтому он почти такой же, как и в этом примере.Единственное, что я не получаю, это то, что он продолжает создавать новые потоки для каждого соединения.

Теперь я могу просто упустить понимание концепции потоков, поэтому я задаю свой вопрос здесь, но не стоитРазве это не очистить неиспользуемые темы и повторно использовать их?Или он уже делает это, и это просто инкрементный счетчик, указывающий число, о котором мне наплевать?

Так что в принципе, на данном примере, я могу безопасно запустить это (как тест) длячасы в конце, с тысячами соединений (не одновременно, а с течением времени) без каких-либо проблем, или он запустит тысячи потоков, которые будут работать гораздо дольше, чем должны?

Спасибо

1 Ответ

6 голосов
/ 12 января 2011

Нет необходимости в потоках. Используйте настоящий асинхронный ввод-вывод. Масштабируется намного лучше. Потоки, ожидающие ввода-вывода, просто добавляют накладные расходы, без увеличения производительности.

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()
...