Ich versuche, einen blockierungsfreien UDP-Server aufzubauen, der verschiedene Ports abhört und Datenpakete bis zum Timeout empfängt. Leider kann ich die Client-Seite nicht ändern und UDP ist obligatorisch. Empfangen von Dateien funktioniert einwandfrei. Das Problem ist, dass das Erstellen der Arbeiter eine Blockierung ist. Ich möchte es nicht blockierend haben, also werden alle Arbeiter parallel gerufen. Außerdem sollte jeder Arbeiter in einer Schleife wie True laufen, aber das war auch blockiert.Multithreading-Sockets in Python
Hier ist mein Code:
#!/usr/bin/env python
from socket import *
import sys
import select
import threading
threads = []
def worker(port):
host="192.168.88.51"
s = socket(AF_INET,SOCK_DGRAM)
s.bind((host,port))
addr = (host,port)
buf=128
data,addr = s.recvfrom(buf)
filename = str(port)+".data"
print str(port)+" received File:"
f = open(filename,'wb')
data, addr = s.recvfrom(buf)
try:
while(data):
f.write(data)
s.settimeout(1)
data,addr = s.recvfrom(buf)
except timeout:
f.close()
s.close()
print "File Downloaded"
for i in range(1300,1305):
wrk = worker(i)
threads.append(wrk)
Sie müssen ein Objekt erstellen, das jede Ihrer Socket-Verbindungen enthält. Dieses Objekt verfügt über separate Verbindungs- und Empfangsmethoden. Sobald Sie diese Einstellung haben, können Sie die Listener-Methode jedes Objekts in einem separaten Thread ausführen. – amicitas