2011-01-12 4 views
2

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

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

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

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

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

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

Спасибо

ответ

6

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

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() 
+0

В примере, который он дал, потоки должны имитировать клиента не на сервере, поэтому масштабируемость сервера не связана. – hhafez

+1

@hhafez: Да, нет, в примере используется подход на основе запроса на запрос на сервере. – nosklo

+0

мой плохой, ты прав – hhafez

Смежные вопросы