Pergunta

Apenas para iniciantes, usei Twisted e SocketServer com o ForkMixin, Threadmixin e experimentei as recepies "Thread-Pool".

No entanto, eu queria fazer algo em particular trabalho em Python.

Um pouco de fundo. Anteriormente, escrevi em C um simples TCP Deamon que se vinculou a um soquete e ouvia nele, depois pré-Fork x muitas vezes e depois passava o servidorsocket descendente para todos os garfos e todos aceitavam muito o casamento.

Eu verifiquei o assíncolo "Select/Poll", que eu gosto muito. Minha única carne foi que eu conseguia um pouco de CPU não me acariciando algumas vezes para tirar proveito da máquina multi-CPU e esperar o melhor com a programação.

Eu não posso fazer funcionar para a minha vida. Apenas 1 instância única pode aceitar conexões, todos os outros simplesmente lançam uma exceção ao lidar com o Connect, 'não podem iterar isso vazio'.

Isso é ainda viável? Eu verifiquei muito, mas não consegui encontrar nenhum código para fazer despacho de assassinato (CRY)

Obrigada!

Atualização 1: (Traceback completo conforme solicitado)

error: uncaptured python exception, closing channel <__main__.EchoServer listening 0.0.0.0:8001 at 0x2ad4880c93f8> (<type 'exceptions.TypeError'>:'NoneType' /python2.6/asyncore.py|readwrite|99] [/usr/local/python2.6.9/lib/python2.6/asyncore.py|handle_read_event|408] [./6py-server.py|handle_accept|87])

Sempre acontece em aceitar, independentemente de eu fork antes do assíncrono.loop, etc.

Atualização 2: (fonte completa) fonte pastebinada

Foi útil?

Solução

Você deve usar a marcação de código para Traceback, caso contrário, ele é exibido e não vemos o tipo de exceção.

Mas eu acredito que é TypeError: 'NoneType' object is not iterable desde self.accept() pode retornar None. O motivo é que vários processos podem obter um evento de leitura para o soquete de escuta, mas apenas um pode aceitá -lo. Os processos de restos serão obtidos EWOULDBLOCK erro que é capturado, mas depois retorna None Em vez de par de endereço de conexão.

Mudar seu handle_accept() para voltar imediatamente quando accept() retorna None.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top