Ich möchte 3 SocketServer in einem Python-Programm erstellen:
import threading
import SimpleHTTPServer
import SocketServer
class PolicyHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(128).strip()
print self.data
if self.data == '<policy-file-request/>\0':
self.request.sendall('message 1')
class LiveRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.request.sendall('message 2')
def main():
httpd = SocketServer.TCPServer(('',80),\
SimpleHTTPServer.SimpleHTTPRequestHandler)
httpdThr = threading.Thread(target=httpd.serve_forever)
httpdThr.daemon = True
httpdThr.start()
liveServer = SocketServer.TCPServer(('',8090), LiveRequestHandler)
livThr = threading.Thread(target=liveServer.serve_forever)
livThr.daemon = True
livThr.start()
policyServer = SocketServer.TCPServer(('',834), PolicyHandler)
policyThr = threading.Thread(target=policyServer.serve_forever)
policyThr.daemon = True
policyThr.start()
if __name__ == '__main__':
main()
Ich führe es aus, die Ausgabe unten:
Finding files... done.
Importing test modules ... done.
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Es ist seltsam, dass das Programm sofort beendet wird, sodass mein Client-Programm keine Verbindung zum Drei-Socket-Server herstellen konnte. Wie kann verhindert werden, dass das Programm beendet wird?
3 Antworten
Daemon-Threads werden beendet, wenn keine Nicht-Daemon-Threads mehr ausgeführt werden. Sie werden daher beendet, wenn main endet. Fügen Sie etwas hinzu, um die Hauptleitung am Laufen zu halten, wie:
raw_input('Press enter to stop servers.')
Wenn Sie die drei Server wirklich mit demselben Programm starten möchten, ist dies eine Lösung.
Jetzt ändere ich meinen Code wie folgt:
httpd = SocketServer.TCPServer(('',80), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpdThr = threading.Thread(target=httpd.serve_forever)
httpdThr.daemon = True
httpdThr.start()
liveServer = SocketServer.TCPServer(('',8090), LiveRequestHandler)
livThr = threading.Thread(target=liveServer.serve_forever)
livThr.daemon = True
livThr.start()
policyServer = SocketServer.TCPServer(('',834), PolicyHandler)
policyThr = threading.Thread(target=policyServer.serve_forever)
policyThr.daemon = True
policyThr.start()
Es funktioniert gut. Aber jetzt weiß ich nicht, wie ich bei Bedarf eine Nachricht an den Client senden soll.
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.