Je suis en train d'écrire un serveur multithread en python en utilisant twisted. callInThread (self.task) est de créer un nouveau thread pour exécuter task() chaque fois qu'un client demande sth à partir du serveur. Lorsque le client envoie des requêtes un par un (tous à travers le port 53), tout fonctionne, mais quand il y a plusieurs demandes en même temps, il ditadresse déjà utilisée avec le serveur multithread dans tordu
File "", line 1, in bind socket.error: [Errno 98] Address already in use
Y at-il STH mal avec mes fils, que l'on peut utiliser le port à la fois? Si oui, comment suis-je censé aller avec multithreading mon serveur? Merci beaucoup!
class BaseThreadedUDPServer(DatagramProtocol):
def datagramReceived(self, datagram, (host, port)):
print "received %r from %s:%d" % (datagram, host, port)
reactor.callInThread(self.task)
def task(a):
print "waiting on port:", csport
while 1:
## RCV QUERY ##
query, addr = csSocket.recvfrom(csbuf)
## GET ANS ##
ans = socket.gethostbyname(query)
## SEND ANS ##
scSocket.sendto(ans, scaddr)
def main():
print "main"
reactor.listenUDP(53, BaseThreadedUDPServer())
reactor.run()
@pilu: On dirait que vous ne vous tordez pas du tout ... vous n'avez pas besoin de fils pour faire des choses en parallèle, en fait vous devriez les éviter complètement. –
que voulez-vous dire? N'avez-vous pas besoin d'avoir des threads pour faire fonctionner les choses en parrallel? – umm
Est-ce que "sth" signifie "quelque chose?" –