Heim > Artikel > Backend-Entwicklung > Wann sollte ich „await' von Python 3.5 verwenden und wann sollte ich es vermeiden?
In Python 3.5 rückt die Einführung von Asyncio und Wait die asynchrone Programmierung in den Vordergrund. Dieser Paradigmenwechsel ermöglicht eine größere Parallelität und eine schnellere Ausführung, seine Grenzen können jedoch verwirrend sein. In diesem Artikel geht es um die Feinheiten, wann man „wait“ einsetzen und wann man „wait“ meiden sollte.
Der Hauptgrund dafür, „await“ zu nutzen, liegt in seiner Fähigkeit, das zu nutzen Leistungsfähigkeit des asynchronen Codes. Berücksichtigen Sie E/A-Vorgänge wie Netzwerkanforderungen oder Dateilesevorgänge. Die synchrone Ausführung dieser Vorgänge blockiert normalerweise das gesamte Programm und zwingt es, auf den Abschluss jeder Aufgabe zu warten. Im Gegensatz dazu ermöglicht asynchroner Code die gleichzeitige Ausführung dieser Vorgänge, wodurch das Programm für die Bearbeitung anderer Aufgaben frei wird.
# Synchronous Way download(url1) # takes 5 sec. download(url2) # takes 5 sec. # Total time: 10 sec. # Asynchronous Way await asyncio.gather( async_download(url1), # takes 5 sec. async_download(url2) # takes 5 sec. ) # Total time: 5 sec. (plus asyncio overhead)
Im obigen Beispiel wird der asynchrone Ansatz in der Hälfte der Zeit abgeschlossen, wodurch die Zeitverschwendung effektiv minimiert wird Warten auf E/A-Vorgänge.
Während „Warten“ sich auszeichnet Da es E/A-Vorgänge verarbeitet, sollte es nicht wahllos auf synchronen Code angewendet werden. Synchroner Code, wie z. B. CPU-gebundene Aufgaben oder einfache Datenmanipulation, profitiert nicht vom asynchronen Paradigma und kann tatsächlich unnötigen Overhead verursachen.
# Synchronous Code That Should Remain Synchronous def parse(html): # This function does not involve any I/O operations. links = extract_links_from_html(html) return links
Das Umwandeln von synchronem Code in asynchronen Code hat keinen Zweck und kann zu a führen Leistungseinbußen.
Ein entscheidender Aspekt, der bei der Verwendung berücksichtigt werden muss Asyncio ist die Auswirkung lang laufender synchroner Vorgänge auf das asynchrone Ökosystem. Synchrone Vorgänge, deren Ausführung längere Zeit dauert (z. B. über 50 ms), können möglicherweise alle laufenden asynchronen Vorgänge einfrieren.
async def extract_links(url): data = await download(url) links = parse(data) # If search_in_very_big_file() takes a long time, # all ongoing async functions (elsewhere in code) will be suspended. links_found = search_in_very_big_file(links)
Um dieses Einfrieren zu verhindern, sollten Sie erwägen, solche lang laufenden Vorgänge in einem separaten Prozess auszuführen Verwendung von Thread-Pools für E/A-gebundene Vorgänge im asynchronen Kontext.
Zusammenfassend lässt sich sagen, dass „await“ in Python 3.5 mit Bedacht eingesetzt werden sollte beim Umgang mit E/A-Vorgängen, um die Vorteile der Parallelität zu nutzen. Dies sollte jedoch für synchronen Code und lang laufende Vorgänge innerhalb des asynchronen Ökosystems vermieden werden, um potenzielle Leistungsprobleme und Engpässe zu vermeiden. Eine sorgfältige Berücksichtigung dieser Prinzipien gewährleistet eine effektive Nutzung der asynchronen Funktionen von Python 3.5.
Das obige ist der detaillierte Inhalt vonWann sollte ich „await' von Python 3.5 verwenden und wann sollte ich es vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!