Heim  >  Artikel  >  Backend-Entwicklung  >  Wann sollte ich „await' von Python 3.5 verwenden und wann sollte ich es vermeiden?

Wann sollte ich „await' von Python 3.5 verwenden und wann sollte ich es vermeiden?

Susan Sarandon
Susan SarandonOriginal
2024-11-21 12:45:16631Durchsuche

When should I use Python 3.5's `await` and when should I avoid it?

Wann sollte man Python 3.5 annehmen und wann man es vermeiden sollte

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.

Await für I/O-Operationen nutzen

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.

Verzicht auf den Missbrauch von „Warten“ für synchronen Code

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.

Besondere Überlegungen für synchrone Vorgänge mit langer Laufzeit

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!

Stellungnahme:
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