Webentwicklung in Python: Tornado in Aktion

PHPz
Freigeben: 2023-06-11 10:49:44
Original
1450 Leute haben es durchsucht

Mit dem Aufkommen des Internets hat die Webentwicklung im IT-Bereich immer mehr an Bedeutung gewonnen. Python ist als High-Level-Programmiersprache, die sich auf Entwicklungseffizienz konzentriert, auch im Bereich der Webentwicklung populär geworden. Unter ihnen nimmt Tornado, ein leichtgewichtiges Netzwerk-Framework, eine einzigartige Position in Python ein. Es verwendet eine asynchrone IO-basierte Methode, wodurch es gleichzeitige Anforderungen schneller verarbeitet als die herkömmliche synchrone IO-Methode. In diesem Artikel werden die Methoden und Techniken zur Verwendung von Tornado für die Webentwicklung in Python anhand praktischer Kämpfe vorgestellt.

1. Installation und grundlegende Verwendung von Tornado

Zunächst müssen wir Tornado in der lokalen Umgebung installieren. Kann über pip installiert werden:

pip install tornado
Nach dem Login kopieren

Nachdem die Installation abgeschlossen ist, können wir mit Tornado einen einfachen Webserver erstellen.

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()
Nach dem Login kopieren

Im obigen Code definieren wir eine von tornado.web.RequestHandler geerbte MainHandler-Klasse, die GET-Anfragen vom Client verarbeiten kann. Im Konstruktor verwenden wir die Methode self.write(), um eine Nachricht an den Client zurückzugeben. Als nächstes definieren wir die Funktion make_app(), die ein tornado.web.Application-Objekt erstellt. Im Konstruktor dieses Objekts ordnen wir die Route der von uns definierten MainHandler-Klasse zu und geben sie zurück. Schließlich erstellen wir ein Anwendungsobjekt im Codeblock if name == „__main__“, überwachen den lokalen 8888-Port und starten die IOLoop-Schleife. Besuchen Sie http://localhost:8888 in Ihrem lokalen Browser und Sie sehen die Meldung „Hallo, Welt“.

2. Asynchrones IO in Tornado

Als effizientes Web-Framework ermöglicht der asynchrone IO-basierte Mechanismus von Tornado eine schnelle Reaktion auf Client-Anfragen. Bei herkömmlichen synchronen E/A-Vorgängen muss jede Anforderung auf den Abschluss der vorherigen Anforderung warten, bevor mit der nächsten Anforderung fortgefahren wird. Bei asynchronen E/A-Vorgängen wird der Thread beim Initiieren einer E/A-Operation nicht für immer blockiert, sondern kehrt sofort zurück und führt die nächste Anforderung weiter aus. Dieser Mechanismus ermöglicht es dem Webserver, mehrere Anfragen gleichzeitig zu bearbeiten, wodurch die gleichzeitigen Verarbeitungsfähigkeiten des Systems verbessert werden.

Schauen wir uns zunächst ein Beispiel für synchrones IO an.

import tornado.ioloop
import tornado.web
import time

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        time.sleep(5)
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()
Nach dem Login kopieren

Im obigen Code simulieren wir einen Vorgang, der 5 Sekunden dauert. Wenn wir mit einem Browser auf den Server zugreifen, werden wir feststellen, dass wir warten, bis die Anfrage bearbeitet wird.

Als nächstes schauen wir uns ein Beispiel für die Verwendung asynchroner E/A-Operationen an.

import tornado.ioloop
import tornado.gen
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    @tornado.gen.coroutine
    def get(self):
        yield tornado.gen.sleep(5)
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()
Nach dem Login kopieren

Im obigen Code verwenden wir den Modifikator tornado.gen.coroutine und die Yield-Anweisung, um asynchrone E/A-Operationen zu implementieren. Dies bedeutet, dass der Prozessor vor der Ausführung der Yield-Anweisung sofort zur nächsten Anforderung zurückkehrt und diese verarbeitet und das Ergebnis erst nach Abschluss des asynchronen Vorgangs an den Client zurückgegeben wird.

3. Multithreading und Multiprozess in Tornado

Zusätzlich zur asynchronen E/A-Fähigkeit kann Tornado auch die gleichzeitigen Verarbeitungsfähigkeiten des Servers durch Multithreading oder Multiprozesstechnologie verbessern. In Tornado können wir zwei Methoden verwenden, um Multithreading oder Multiprozessverarbeitung zu implementieren:

1. Verwenden Sie tornado.process.fork_processes(), um den Multiprozessmodus automatisch zuzuordnen Anzahl der CPU-Kerne.

import tornado.ioloop
import tornado.web
import tornado.process

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.process.fork_processes()
    tornado.ioloop.IOLoop.current().start()
Nach dem Login kopieren

Im obigen Code verwenden wir die Methode tornado.process.fork_processes(), um den Multiprozessmodus zu aktivieren, damit wir die Vorteile der CPU-Parallelverarbeitung voll ausnutzen können.

2. Verwenden Sie tornado.concurrent.futures.ThreadPoolExecutor(), um den Multithreading-Modus zu aktivieren.

import tornado.ioloop
import tornado.web
import tornado.concurrent
import concurrent.futures

class MainHandler(tornado.web.RequestHandler):
    executor = concurrent.futures.ThreadPoolExecutor()

    @tornado.concurrent.run_on_executor
    def my_background_task(self):
        # 执行一些耗时的IO操作
        return result

    @tornado.gen.coroutine
    def get(self):
        result = yield self.my_background_task()
        self.write(result)

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()
Nach dem Login kopieren

Im obigen Code verwenden wir tornado.concurrent.futures.ThreadPoolExecutor(), um den Multithreading-Modus zu aktivieren, und verwenden den Modifikator @tornado.concurrent.run_on_executor, um die Methode my_background_task() zur Ausführung an den Thread-Pool zu übergeben . Auf diese Weise können wir mehrere E/A-Vorgänge gleichzeitig in einem einzigen Thread verarbeiten.

IV. Zusammenfassung

Dieser Artikel ermöglicht es den Lesern, die Methoden und Techniken der Verwendung von Tornado für die Webentwicklung in Python zu verstehen, indem er die grundlegende Verwendung von Tornado, asynchrone E/A-Operationen, Multithreading- und Multiprozesstechnologie sowie Anwendungsbeispiele vorstellt. Die Effizienz, Einfachheit und Flexibilität von Tornado machen es zu einem der wichtigsten Tools für die Webentwicklung in Python. Obwohl Tornado nicht für alle Webszenarien geeignet ist, zeigt Tornado in einigen Szenarien mit hohen Leistungs- und Parallelitätsanforderungen seine überlegene Leistung.

Das obige ist der detaillierte Inhalt vonWebentwicklung in Python: Tornado in Aktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage