Ich habe kleine Server und Client-Python-Skripte, wo der Client eine Zeichenfolge sendet und der Server antwortet mit der Umkehrung. Wenn der Client eine Beendigungszeichenfolge eingibt, wird der Client beendet und der Server beendet.Wie führe ich eine Hintergrundprozedur aus, während ich ständig nach Eingaben suche - Threading?
Ich möchte die "receive, reverse, send" -Prozedur des Servers im Hintergrund laufen lassen, während das Programm ständig stdin nach einer Quit-Zeichenkette prüft.
Ich habe versucht mit threading
aber wegen der Blockierung, dass viele Socket-Aufrufe verursachen würde es nicht richtig funktionieren.
Nur damit Sie eine Vorstellung davon bekommen, was ich bereits getan habe.
server.py:
import socket
from time import sleep
sock = socket.socket()
sock.bind(("127.0.0.1",12346))
sock.listen(3)
print "Waiting on connection"
conn = sock.accept()
print "Client connected"
while True:
m = conn[0].recv(4096)
if m == "exit":
sleep(1)
break
else:
conn[0].send(m[::-1])
sock.shutdown(socket.SHUT_RDWR)
sock.close()
client.py:
import socket
sock = socket.socket()
sock.connect(("127.0.0.1",12346))
while True:
s = raw_input("message: ")
sock.send(s)
if s == "exit":
print "Quitting"
break
print sock.recv(4096)
sock.shutdown(socket.SHUT_RDWR)
sock.close()
"receive, reverse, send" sieht aus wie eine sehr kurze Zeit, meiner Meinung nach, warum möchten Sie es in den Hintergrund laufen lassen? – justhalf
Weil ich im selben Prozess keine Möglichkeit sehe, "receive, reverse, send" und "get user input" zu erhalten, weil "rohe_input()" blockiert, bis es Eingaben empfängt, die den Fluss von Paketen unterbrechen. Ich habe zwei Ideen, die ich nicht in die Tat umsetzen möchte: Geben Sie dem Client die Möglichkeit, den Server zu töten, oder begrenzen Sie wie lange '' raw_input() '' blockiert für (ein Timeout) – lightandlight
ich nicht verstehen. Sie möchten also die beiden Skripte "server.py" und "client.py" in einem einzigen Skript zusammenfassen und nur dieses eine Skript ausführen? Oder willst du einfach "server.py" im Hintergrund laufen lassen (in Unix kann das mit 'python server.py &' geschehen)? – justhalf