Inhaltsverzeichnis
1. Coroutine-Funktion schreiben
2. Rufen Sie die Coroutine-Funktion auf
Beispiel: Aufruf der Coroutine-Funktion über die Coroutine-Funktion
Beispiel: Wenn IOLoo nicht gestartet wurde, wird es über die Funktion run_sync() von IOLoop aufgerufen.
Wenn das Programm nicht in den laufenden Zustand von IOLoop eingetreten ist, kann die Coroutine-Funktion über die Funktion run_sync() aufgerufen werden. " >Wenn das Programm nicht in den laufenden Zustand von IOLoop eingetreten ist, kann die Coroutine-Funktion über die Funktion run_sync() aufgerufen werden.
Beispiel: Wenn IOLoop gestartet wird, rufen Sie " >Beispiel: Wenn IOLoop gestartet wird, rufen Sie
Der direkte Aufruf von Blockierungsfunktionen in Coroutinen wirkt sich auf die Leistung der Coroutinen selbst aus. Daher bietet Tornado die Verwendung von Thread-Pools zum Planen von Blockierungsfunktionen in Coroutinen an hat keinen Einfluss auf die weitere Ausführung der Coroutine selbst.
Bisher kennen wir die Programmiermethode des Wartens auf einen asynchronen Aufruf mit dem Schlüsselwort yield in der Coroutine. Tatsächlich ermöglicht Tornado die Verwendung eines Yield-Schlüsselworts in einer Coroutine, um auf mehrere asynchrone Aufrufe zu warten. Sie müssen diese Aufrufe nur in Form einer Liste oder eines Wörterbuchs an das Yield-Schlüsselwort übergeben.
Heim Backend-Entwicklung Python-Tutorial Detaillierte Erläuterung der Verwendung von Tornado-Coroutinen in Python (mit Beispielen)

Detaillierte Erläuterung der Verwendung von Tornado-Coroutinen in Python (mit Beispielen)

Oct 16, 2018 pm 04:03 PM
python

Dieser Artikel bietet Ihnen eine detaillierte Erklärung der Verwendung von Tornado-Coroutinen in Python (mit Beispielen). Ich hoffe, dass er für Freunde hilfreich ist.

Durch die Verwendung von Tornado-Coroutinen kann ein asynchrones Verhalten entwickelt werden, das dem synchronen Code ähnelt. Da die Coroutine selbst keine Threads verwendet, verringert sie gleichzeitig den Aufwand für den Thread-Kontextwechsel und ist ein effizientes Entwicklungsmodell.

1. Coroutine-Funktion schreiben

Beispiel: Verwendung der Coroutine-Technologie zur Entwicklung einer Webseitenzugriffsfunktion

#用协程技术开发网页访问功能
from tornado import  gen #引入协程库gen
from tornado.httpclient import AsyncHTTPClient
import time

#使用gen.coroutine修饰器
@gen.coroutine
def coroutine_visit():
    http_client=AsyncHTTPClient()
    response=yield http_client.fetch("http://www.baidu.com")
    print(response.body)
Nach dem Login kopieren

In diesem Beispiel wird weiterhin der asynchrone Client AsyncHTTPClient für den Seitenzugriff verwendet. Der Dekorator @gen.coroutine erklärt, dass es sich um eine Coroutine-Funktion handelt. Aufgrund des yield-Schlüsselworts ist es nicht erforderlich, eine Callback-Funktion in den Code zu schreiben, um die Zugriffsergebnisse zu verarbeiten. Stattdessen kann die Ergebnisverarbeitungsanweisung direkt nach geschrieben werden Ertragserklärung.

2. Rufen Sie die Coroutine-Funktion auf

Da die Tornado-Coroutine auf der Grundlage des Python-Schlüsselworts yield implementiert wird, kann sie nicht direkt wie eine gewöhnliche Funktion aufgerufen werden.
Coroutine-Funktionen können auf die folgenden drei Arten aufgerufen werden:

  • Wird über das Schlüsselwort yield innerhalb einer Funktion aufgerufen, die selbst eine Coroutine ist.

  • Wenn IOLoop nicht gestartet ist, wird es über die Funktion run_sync() von IOLoop aufgerufen.

  • Wenn IOLoop gestartet wurde, wird es über die Funktion spawn_callback() von IOLoop aufgerufen.

Beispiel: Aufruf der Coroutine-Funktion über die Coroutine-Funktion

Code:

#用协程技术开发网页访问功能
from tornado import  gen #引入协程库gen
from tornado.httpclient import AsyncHTTPClient
import time

#使用gen.coroutine修饰器
@gen.coroutine
def coroutine_visit():
    http_client=AsyncHTTPClient()
    response=yield http_client.fetch("http://www.baidu.com")
    print(response.body)

@gen.coroutine
def outer_coroutine():
    print("start call coroutine_visit")
    yield coroutine_visit()
    print("end call coroutine_cisit")
Nach dem Login kopieren

In diesem Beispiel sind äußere_coroutine() und coroutine_visit() beides Coroutine-Funktionen Programmierfunktionen, sodass sie über das Schlüsselwort yield aufgerufen werden können. _

Beispiel: Wenn IOLoo nicht gestartet wurde, wird es über die Funktion run_sync() von IOLoop aufgerufen.
IOLoop ist das Hauptereignisschleifenobjekt von Tornado. Das Tornado-Programm verwendet es, um Zugriffsanfragen von externen Clients zu überwachen und entsprechende Vorgänge auszuführen.

Code:

#用协程技术开发网页访问功能
from tornado import  gen #引入协程库gen
from tornado.httpclient import AsyncHTTPClient
from tornado.ioloop import IOLoop  #引入IOLoop对象

#使用gen.coroutine修饰器
@gen.coroutine
def coroutine_visit():
    http_client=AsyncHTTPClient()
    response=yield http_client.fetch("http://www.baidu.com")
    print(response.body)

def func_normal():
    print("start call coroutine_visit")
    IOLoop.current().run_sync(lambda :coroutine_visit())
    print("end call coroutine_visit")
Nach dem Login kopieren
Wenn das Programm nicht in den laufenden Zustand von IOLoop eingetreten ist, kann die Coroutine-Funktion über die Funktion run_sync() aufgerufen werden.

Hinweis: Die Funktion run_sync() blockiert den Aufruf der aktuellen Funktion, bis die aufgerufene Coroutine ausgeführt wird.

Tatsächlich erfordert Tornado, dass die Coroutine-Funktion im laufenden Zustand von IOLoop aufgerufen werden kann, aber die Funktion run_sync führt die Schritte zum Starten und Stoppen von IOLoop automatisch aus:

[IOLoop starten]》[Die von Lambda gekapselte Coroutine-Funktion aufrufen]》[IOLoop stoppen]

Beispiel: Wenn IOLoop gestartet wird, rufen Sie
Code:

#用协程技术开发网页访问功能
from tornado import  gen #引入协程库gen
from tornado.httpclient import AsyncHTTPClient
from tornado.ioloop import IOLoop  #引入IOLoop对象

#使用gen.coroutine修饰器
@gen.coroutine
def coroutine_visit():
    http_client=AsyncHTTPClient()
    response=yield http_client.fetch("http://www.baidu.com")
    print(response.body)

def func_normal():
    print("start call coroutine_visit")
    IOLoop.current().spawn_callback(coroutine_visit)
    print("end call coroutine_visit")
Nach dem Login kopieren
Die Funktion spawn_callback() wartet nicht darauf, dass die aufgerufene Coroutine die Ausführung abschließt. Alle oberen und unteren Druckanweisungen werden sofort abgeschlossen und coroutine__visit selbst wird zum entsprechenden Zeitpunkt von IOLoop aufgerufen .

Hinweis: Die spawn_callback()-Funktion von IOLoop stellt Entwicklern keine Methode zum Erhalten des Rückgabewerts eines Coroutine-Funktionsaufrufs zur Verfügung, sodass Sie span_callback() nur zum Aufrufen einer Coroutine-Funktion ohne Rückgabewert verwenden können.

3. Blockierungsfunktionen in Coroutinen aufrufen

Der direkte Aufruf von Blockierungsfunktionen in Coroutinen wirkt sich auf die Leistung der Coroutinen selbst aus. Daher bietet Tornado die Verwendung von Thread-Pools zum Planen von Blockierungsfunktionen in Coroutinen an hat keinen Einfluss auf die weitere Ausführung der Coroutine selbst.

Codebeispiel:

from concurrent.futures import ThreadPoolExecutor
from tornado import gen

#定义线程池
thread_pool=ThreadPoolExecutor(2)

def mySleep(count):
    import time
    for x in range(count):
        time.sleep(1)

@gen.coroutine
def call_blocking():
    print("start")
    yield thread_pool.submit(mySleep,10)
    print("end")
Nach dem Login kopieren
Der Code referenziert zunächst die ThreadPoolExecutor-Klasse von concurrent.futures und instanziiert einen Thread-Pool thread_pool, der aus zwei Threads besteht. Verwenden Sie in der Coroutine call_blocking, die eine Blockierungsfunktion aufrufen muss, thread_pool.submit, um die Blockierungsfunktion aufzurufen und über yield zurückzugeben. Dies blockiert nicht die weitere Ausführung des Threads, in dem sich die Coroutine befindet, und stellt außerdem die Ausführungsreihenfolge des Codes vor und nach der Blockierungsfunktion sicher.

4. Warten auf mehrere asynchrone Aufrufe in der Coroutine

Bisher kennen wir die Programmiermethode des Wartens auf einen asynchronen Aufruf mit dem Schlüsselwort yield in der Coroutine. Tatsächlich ermöglicht Tornado die Verwendung eines Yield-Schlüsselworts in einer Coroutine, um auf mehrere asynchrone Aufrufe zu warten. Sie müssen diese Aufrufe nur in Form einer Liste oder eines Wörterbuchs an das Yield-Schlüsselwort übergeben.

Beispiel: Verwenden Sie eine Liste, um mehrere asynchrone Aufrufe zu übergeben
#使用列表方式传递多个异步调用
from tornado import gen  #引入协程库gen
from tornado.httpclient import AsyncHTTPClient

@gen.coroutine   #使用gen.coroutine修饰器
def coroutine_visit():
    http_client=AsyncHTTPClient()
    list_response=yield [
        http_client.fetch("http://www.baidu.com"),
        http_client.fetch("http://www.api.jiutouxiang.com")
    ]
    for response in list_response:
        print(response.body)
Nach dem Login kopieren
Verwenden Sie weiterhin den @gen.coroutine-Dekorator, um die Coroutine im Code zu definieren, und verwenden Sie eine Liste, um eine Zahl zu übergeben wobei yield erforderlich ist. Bei einem asynchronen Aufruf kehrt yield erst dann zurück und setzt die Ausführung fort, wenn alle Aufrufe in der Liste abgeschlossen sind. yield gibt die Anrufergebnisse in einer Liste zurück.

Beispiel: Übergeben Sie mehrere asynchrone Aufrufe im Wörterbuchmodus:
#使用列表方式传递多个异步调用
from tornado import gen  #引入协程库gen
from tornado.httpclient import AsyncHTTPClient

@gen.coroutine   #使用gen.coroutine修饰器
def coroutine_visit():
    http_client=AsyncHTTPClient()
    dict_response=yield {
       "baidu": http_client.fetch("http://www.baidu.com"),
        "9siliao":http_client.fetch("http://www.api.jiutouxiang.com")
    }
    print(dict_response["baidu"].body)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von Tornado-Coroutinen in Python (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Grund, warum PS immer wieder Laden zeigt? Was ist der Grund, warum PS immer wieder Laden zeigt? Apr 06, 2025 pm 06:39 PM

PS "Laden" Probleme werden durch Probleme mit Ressourcenzugriff oder Verarbeitungsproblemen verursacht: Die Lesegeschwindigkeit von Festplatten ist langsam oder schlecht: Verwenden Sie Crystaldiskinfo, um die Gesundheit der Festplatte zu überprüfen und die problematische Festplatte zu ersetzen. Unzureichender Speicher: Upgrade-Speicher, um die Anforderungen von PS nach hochauflösenden Bildern und komplexen Schichtverarbeitung zu erfüllen. Grafikkartentreiber sind veraltet oder beschädigt: Aktualisieren Sie die Treiber, um die Kommunikation zwischen PS und der Grafikkarte zu optimieren. Dateipfade sind zu lang oder Dateinamen haben Sonderzeichen: Verwenden Sie kurze Pfade und vermeiden Sie Sonderzeichen. Das eigene Problem von PS: Installieren oder reparieren Sie das PS -Installateur neu.

So verwenden Sie MySQL nach der Installation So verwenden Sie MySQL nach der Installation Apr 08, 2025 am 11:48 AM

Der Artikel führt den Betrieb der MySQL -Datenbank vor. Zunächst müssen Sie einen MySQL -Client wie MySQLworkBench oder Befehlszeilen -Client installieren. 1. Verwenden Sie den Befehl mySQL-uroot-P, um eine Verbindung zum Server herzustellen und sich mit dem Stammkonto-Passwort anzumelden. 2. Verwenden Sie die Erstellung von Createdatabase, um eine Datenbank zu erstellen, und verwenden Sie eine Datenbank aus. 3.. Verwenden Sie CreateTable, um eine Tabelle zu erstellen, Felder und Datentypen zu definieren. 4. Verwenden Sie InsertInto, um Daten einzulegen, Daten abzufragen, Daten nach Aktualisierung zu aktualisieren und Daten nach Löschen zu löschen. Nur indem Sie diese Schritte beherrschen, lernen, mit gemeinsamen Problemen umzugehen und die Datenbankleistung zu optimieren, können Sie MySQL effizient verwenden.

Wie kontrolliert PS -Federn die Weichheit des Übergangs? Wie kontrolliert PS -Federn die Weichheit des Übergangs? Apr 06, 2025 pm 07:33 PM

Der Schlüssel zur Federkontrolle liegt darin, seine allmähliche Natur zu verstehen. PS selbst bietet nicht die Möglichkeit, die Gradientenkurve direkt zu steuern, aber Sie können den Radius und die Gradientenweichheit flexius durch mehrere Federn, Matching -Masken und feine Selektionen anpassen, um einen natürlichen Übergangseffekt zu erzielen.

Muss MySQL bezahlen? Muss MySQL bezahlen? Apr 08, 2025 pm 05:36 PM

MySQL hat eine kostenlose Community -Version und eine kostenpflichtige Enterprise -Version. Die Community -Version kann kostenlos verwendet und geändert werden, die Unterstützung ist jedoch begrenzt und für Anwendungen mit geringen Stabilitätsanforderungen und starken technischen Funktionen geeignet. Die Enterprise Edition bietet umfassende kommerzielle Unterstützung für Anwendungen, die eine stabile, zuverlässige Hochleistungsdatenbank erfordern und bereit sind, Unterstützung zu bezahlen. Zu den Faktoren, die bei der Auswahl einer Version berücksichtigt werden, gehören Kritikalität, Budgetierung und technische Fähigkeiten von Anwendungen. Es gibt keine perfekte Option, nur die am besten geeignete Option, und Sie müssen die spezifische Situation sorgfältig auswählen.

Wie richte ich PS -Federn ein? Wie richte ich PS -Federn ein? Apr 06, 2025 pm 07:36 PM

PS Federn ist ein Bildkantenschwärcheneffekt, der durch den gewichteten Durchschnitt der Pixel im Randbereich erreicht wird. Das Einstellen des Federradius kann den Grad der Unschärfe steuern und je größer der Wert ist, desto unscharfer ist er. Eine flexible Einstellung des Radius kann den Effekt entsprechend den Bildern und Bedürfnissen optimieren. Verwenden Sie beispielsweise einen kleineren Radius, um Details bei der Verarbeitung von Charakterfotos zu erhalten und einen größeren Radius zu verwenden, um ein dunstiges Gefühl bei der Verarbeitung von Kunst zu erzeugen. Es ist jedoch zu beachten, dass zu groß der Radius leicht an Kantendetails verlieren kann, und zu klein ist der Effekt nicht offensichtlich. Der Federneffekt wird von der Bildauflösung beeinflusst und muss anhand des Bildverständnisses und des Griffs von Effekten angepasst werden.

Was soll ich tun, wenn sich die PS -Karte in der Ladeschnittstelle befindet? Was soll ich tun, wenn sich die PS -Karte in der Ladeschnittstelle befindet? Apr 06, 2025 pm 06:54 PM

Die Ladeschnittstelle der PS-Karte kann durch die Software selbst (Dateibeschäftigung oder Plug-in-Konflikt), die Systemumgebung (ordnungsgemäße Treiber- oder Systemdateienbeschäftigung) oder Hardware (Hartscheibenbeschäftigung oder Speicherstickfehler) verursacht werden. Überprüfen Sie zunächst, ob die Computerressourcen ausreichend sind. Schließen Sie das Hintergrundprogramm und geben Sie den Speicher und die CPU -Ressourcen frei. Beheben Sie die PS-Installation oder prüfen Sie, ob Kompatibilitätsprobleme für Plug-Ins geführt werden. Aktualisieren oder Fallback die PS -Version. Überprüfen Sie den Grafikkartentreiber und aktualisieren Sie ihn und führen Sie die Systemdateiprüfung aus. Wenn Sie die oben genannten Probleme beheben, können Sie die Erkennung von Festplatten und Speichertests ausprobieren.

So optimieren Sie die Datenbankleistung nach der MySQL -Installation So optimieren Sie die Datenbankleistung nach der MySQL -Installation Apr 08, 2025 am 11:36 AM

Die MySQL -Leistungsoptimierung muss von drei Aspekten beginnen: Installationskonfiguration, Indexierung und Abfrageoptimierung, Überwachung und Abstimmung. 1. Nach der Installation müssen Sie die my.cnf -Datei entsprechend der Serverkonfiguration anpassen, z. 2. Erstellen Sie einen geeigneten Index, um übermäßige Indizes zu vermeiden und Abfrageanweisungen zu optimieren, z. B. den Befehl Erklärung zur Analyse des Ausführungsplans; 3. Verwenden Sie das eigene Überwachungstool von MySQL (ShowProcessList, Showstatus), um die Datenbankgesundheit zu überwachen und die Datenbank regelmäßig zu sichern und zu organisieren. Nur durch kontinuierliche Optimierung dieser Schritte kann die Leistung der MySQL -Datenbank verbessert werden.

Welchen Einfluss hat PS -Federn auf die Bildqualität? Welchen Einfluss hat PS -Federn auf die Bildqualität? Apr 06, 2025 pm 07:21 PM

PS -Federn kann zu einem Verlust von Bilddetails, einer verringerten Farbsättigung und einem erhöhten Rauschen führen. Um den Aufprall zu verringern, wird empfohlen, einen kleineren Federradius zu verwenden, die Ebene und dann die Feder zu kopieren und die Bildqualität vor und nach der Federung vorsichtig zu vergleichen. Darüber hinaus ist die Federn für alle Fälle nicht geeignet, und manchmal sind Werkzeuge wie Masken besser zum Umgang mit Bildkanten geeignet.

See all articles