Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan terbitan tak segerak Python

Bagaimana untuk menggunakan terbitan tak segerak Python

ke hadapan
2023-04-19 15:07:08863semak imbas

Pengenalan

Apabila kita memikirkan "pythonic", pemahaman seperti pemahaman senarai dan kamus adalah ciri Python.

Ini adalah salah satu cara kami melakukan gelung, tidak seperti kebanyakan bahasa lain.

Asyncio membenarkan kami menggunakan pemahaman tak segerak.

Kami boleh menggunakan pemahaman tak segerak untuk mengulangi penjana tak segerak dan iterator tak segerak melalui ungkapan "async for".

1. Apakah itu terbitan tak segerak

Terbitan tak segerak ialah versi tak segerak bagi terbitan klasik. Asyncio menyokong dua jenis pemahaman tak segerak, iaitu pemahaman "tak segerak untuk" dan pemahaman "menunggu".

Sebelum kita melihat setiap satu, mari kita semak semula terbitan klasik.

2. Pemahaman

Pemahaman membolehkan anda membuat koleksi data seperti senarai, kamus dan set dengan cara yang ringkas. Pemahaman senarai membenarkan mencipta senarai daripada ungkapan untuk dalam ungkapan senarai baharu.

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

juga menyokong pemahaman untuk mencipta kamus dan set.

...
# 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. Pemahaman Asynchronous

Pemahaman tak segerak membenarkan penciptaan senarai, set atau kamus menggunakan ungkapan "async for" dengan objek boleh lelar tak segerak.

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

Ini akan membuat dan menjadualkan coroutine atau tugasan seperti yang diperlukan dan meletakkan keputusan mereka ke dalam senarai.

Ingat bahawa ungkapan "async for" hanya boleh digunakan dalam coroutine dan tugasan.

Selain itu, ingat bahawa lelaran tak segerak ialah lelaran yang menghasilkan objek yang boleh ditunggu.

Ungkapan "async for" membenarkan pemanggil untuk mengulangi lelaran tak segerak bagi objek yang ditunggu dan mendapatkan semula hasil daripada setiap objek.

Secara dalaman, gelung async for akan menghuraikan atau menunggu setiap coroutine penghantaran yang menunggu mengikut keperluan.

Penjana tak segerak secara automatik melaksanakan kaedah lelaran tak segerak dan juga boleh digunakan untuk terbitan tak segerak.

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

4. Tunggu terbitan

Ungkapan "Tunggu" juga boleh digunakan dalam senarai, set atau pemahaman kamus, yang dipanggil menunggu terbitan.

Seperti pemahaman tak segerak, ia hanya boleh digunakan dalam coroutine atau tugasan tak segerak.

Ini membolehkan penciptaan struktur data seperti senarai dengan menggantung dan menunggu pada urutan objek yang boleh ditunggu.

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

Ini akan membuat senarai keputusan dengan menunggu pada setiap objek yang boleh ditunggu secara bergilir-gilir.

Coroutine semasa akan digantung untuk melaksanakan objek yang boleh ditunggu secara berurutan, yang berbeza daripada melaksanakannya secara serentak menggunakan asyncio.gather(), dan mungkin lebih perlahan.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan terbitan tak segerak Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam