Question

Juste pour commencer, je tordu et SocketServer avec les deux ForkMixIn, ThreadMixIn et essayé les recepies "thread-pool".

Cependant, je voulais faire quelque chose de travail particulier en Python.

fond Alittle. Auparavant, je l'ai écrit en C un deamon TCP simple qui lierait à une prise et d'écouter sur elle, puis pré-fourche X à plusieurs reprises et puis juste passer le ServerSocket desc à toutes les fourches et tout le monde accepterait les clients très très marrily.

J'ai vérifié la base « select / sondage » asyncore que je l'aime beaucoup. Mon seul boeuf était que je pouvais obtenir un peu de CPU non liée par bifurquer à quelques reprises pour profiter de la machine multi-cpu et espérer pour le mieux avec la programmation.

Je ne peux pas le faire travailler pour la vie de moi. Seulement 1 seule instance peut accepter des connexions, tous les autres jettent simplement une exception sur la manipulation de la connexion, 'ne peut itérer à travers vide.

est-ce même possible? J'ai vérifié beaucoup, mais je ne pourrais pas trouver un code pour bifurquer asyncore dispatchers (cri)

Merci!

Mise à jour 1: (retraçage complète à la demande)

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])

cela arrive toujours accepter, peu importe si je fourchette avant le asyncore.loop, etc.

Mise à jour 2: (source complète) pastebined source

Était-ce utile?

La solution

Vous devez utiliser le code pour le balisage retraçage, sinon il est affiché Messed et nous ne voyons pas le type d'exception.

Mais je crois qu'il est TypeError: 'NoneType' object is not iterable depuis self.accept() peut retourner None. La raison en est que plusieurs processus peuvent se lire événement pour écouter prise, mais on peut l'accepter. Les processus de repos auront erreur EWOULDBLOCK qui est pris, mais il retourne None au lieu de paire adresse de connexion.

Changer votre handle_accept() retourner immédiatement quand accept() retourne None.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top