Home  >  Article  >  Backend Development  >  How to apply Python asynchronous derivation

How to apply Python asynchronous derivation

forward
2023-04-19 15:07:08866browse

Introduction

When we think of "pythonic", comprehensions such as list and dictionary comprehensions are a feature of Python.

This is one way we perform loops, unlike many other languages.

Asyncio allows us to use asynchronous comprehensions.

We can use asynchronous comprehensions to traverse asynchronous generators and asynchronous iterators through "async for" expressions.

1. What is asynchronous derivation

Asynchronous derivation is an asynchronous version of classic derivation. Asyncio supports two types of asynchronous comprehensions, they are "async for" comprehensions and "await" comprehensions.

Before we look at each, let us first review the classic derivation.

2. Comprehensions

Comprehensions allow you to create data collections such as lists, dictionaries, and sets in a concise way. List comprehensions allow creating a list from a for expression within a new list expression.

...
# create a list using a list comprehension
result = [a*2 for a in range(100)]

also supports comprehensions to create dictionaries and sets.

...
# create a dict using a comprehension
result = {a:i for a,i in zip(['a','b','c'],range(3))}
# create a set using a comprehension
result = {a for a in [1, 2, 3, 2, 3, 1, 5, 4]}

3. Asynchronous comprehensions

Asynchronous comprehensions allow the creation of a list, set, or dictionary using an "async for" expression with an asynchronous iterable object.

...
# async list comprehension with an async iterator
result = [a async for a in aiterable]

This will create and schedule coroutines or tasks as needed and put their results into a list.

Recall that the "async for" expression can only be used in coroutines and tasks.

Also, recall that an asynchronous iterator is an iterator that produces waitable objects.

The "async for" expression allows the caller to iterate over an asynchronous iterator of awaited objects and retrieve the results from each object.

Internally, the async for loop will automatically parse or wait for each waitable dispatch coroutine as needed.

The asynchronous generator automatically implements the method of asynchronous iterator and can also be used for asynchronous derivation.

...
# async list comprehension with an async generator
result = [a async for a in agenerator]

4. Await derivation

The "wait" expression can also be used in list, set or dictionary comprehension, which is called await derivation.

Like asynchronous derivation, it can only be used in asynchronous coroutines or tasks.

This allows the creation of data structures such as lists by suspending and waiting on a sequence of awaitable objects.

...
# await list compression with a collection of awaitables
results = [await a for a in awaitables]

This will create a list of results by waiting on each awaitable object in turn.

The current coroutine will be suspended to execute waitable objects sequentially, which is different from using asyncio.gather() to execute them concurrently, and may be slower.

The above is the detailed content of How to apply Python asynchronous derivation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete