hoffentlich kann mir hier aus dem Forum jemand einen Tipp geben, ich bin schon langsam am verzweifeln...
Ich versuche asynchron zu prüfen ob eine Reihe von Ports offen ist. Seit zwei Tagen lese ich mich schon durch Internet und ich bekomme das einfach nicht hin.
Ich verwende folgende Funktion um synchron zu prüfen ob ein Port Remote erreichbar ist:
Code: Alles auswählen
def check_port(hostname: str, port: int) -> bool:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2)
try:
s.connect((hostname, int(port)))
s.shutdown(socket.SHUT_RDWR)
return True
except Exception as ex:
print(ex)
return False
finally:
s.close()
Ich möchte gerne s.connect(hostname, port) aufrufen dann dann per callback informiert werden, wenn das Ergebnis vorliegt. Das geht ganz schnell, wenn der Port offen ist. Ist er nicht erreichbar, dauert das eben so lange wie der Timeout eingestellt ist. Wenn ich eine Liste mit 10 Ports habe, dauert das unter Umständen schon ganz schän lange.
Langsam glaube ich, dass ich mit async io völlig auf dem Holzweg bin und das doch über einen Threadpool oder ähnliches Lösen muss.
Ich kenne mich leider bisher mit Python nicht besonders gut aus. Mit der Funktionsweise von Threads in in den Programmiersprachen C++ oder C# kenne ich mich beispielsweise ganz gut aus. Python habe ich bisher nur für einfache Scripts verwendet. Mit asyncio oder Threading hatte ich in Python noch gar keinen Kontakt.
Ich hoffe mir kann jemand den Entscheidenden Tipp gehen.
Vielen Danlk!