3 Stimmen

Python Web Server - Erledigung anderer Aufgaben

Anhand des folgenden Beispiels kann ich einen einfachen Webserver zum Laufen bringen, aber mein Problem ist, dass handle_request() do_something_else() blockiert, bis eine Anforderung eingeht. Gibt es eine Möglichkeit, dies zu umgehen und den Webserver andere Hintergrundaufgaben erledigen zu lassen?

def run_while_true(server_class=BaseHTTPServer.HTTPServer,
               handler_class=BaseHTTPServer.BaseHTTPRequestHandler):

    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    while keep_running():
        httpd.handle_request()
        do_something_else()

2voto

Michael Mior Punkte 27045

Sie können mehrere Threads der Ausführung durch die Python Einfädelmodul . Ein Beispiel ist unten aufgeführt:

import threading

# ... your code here...

def run_while_true(server_class=BaseHTTPServer.HTTPServer,
               handler_class=BaseHTTPServer.BaseHTTPRequestHandler):

    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    while keep_running():
        httpd.handle_request()

if __name__ == '__main__':
    background_thread = threading.Thread(target=do_something_else)
    background_thread.start()
    # ... web server start code here...
    background_thread.join()

Dadurch wird ein Thread ausgelöst, der die do_something_else() vor Ihrem Webserver zu starten. Wenn der Server herunterfährt, wird die join() Anruf gewährleistet do_something_else beendet wird, bevor das Programm beendet wird.

0voto

Donald Miner Punkte 37271

Sie sollten eine rosca der http-Anfragen bearbeitet, und einen Thread, der die do_something_else() .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X