10.1 AsyncIterator
Asinxron iteratorlar (AsyncIterator)
verilənlər ardıcıllığı ilə işləməyə imkan verir, hansılar ki elementləri asinxron istehsal edir. Bunlar asinxron funksiyalar və korutinlərdə istifadə olunur gecikmə ilə əldə edilən verilənləri, məsələn, şəbəkə sorğularından, asinxron giriş-çıxış əməliyyatlarından və ya digər asinxron mənbələrdən iterasiya etmək üçün.
Asinxron iterator
Asinxron iterator iki metodu reallaşdırmalıdır:
__aiter__()
metodu:
Bu metod özü asinxron iteratoru qaytarmalıdır. Bu metodun analoqu sinxron iteratorlar üçün __iter__()
metodudur.
__anext__()
metodu:
Bu metod növbəti dəyəri asinxron olaraq qaytarmalıdır və ya elementlər tükəndikdə StopAsyncIteration
istisnasını çağırmalıdır. Bu, sinxron iteratorlar üçün __next__()
metoduna bənzəyir.
Nümunə:
import asyncio
class AsyncIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __aiter__(self):
return self
async def __anext__(self)(self):
if self.current >= self.end:
raise StopAsyncIteration
await asyncio.sleep(1) # Asinxron gecikmə imitasiya
self.current += 1
return self.current
async def main():
async for number in AsyncIterator(1, 5):
print(number)
asyncio.run(main())
Asinxron iteratorlar verilənləri daxil olduqca işləməyə imkan verir, digər tapşırıqların yerinə yetirilməsini bloklamadan. Bu şəbəkə sorğuları və digər asinxron əməliyyatlarla işləmək üçün xüsusilə faydalıdır.
Asinxron iteratorlardan istifadə, verilənlər ardıcıllığını asinxron olaraq işləmək üçün daha oxunaqlı və saxlanması rahat kod yazmağa imkan verir.
10.2 AsyncGenerator
Asinxron generatörlər async
və await
açar sözləri istifadə edərək, dəyərləri asinxron şəkildə istehsal etməyə imkan verir. Onlar adi generatörlərə bənzər işləyir, amma asinxron əməliyyatlar üçün icranı dayandıra bilirlər.
Asinxron generatör yaratmaq
Asinxron generatör async
def
və yield
ilə təyin olunur. Asinxron generatörlər daxilində asinxron əməliyyatlar yerinə yetirmək üçün await
istifadə edə bilər.
Nümunə:
async def async_generator():
for i in range(3):
await asyncio.sleep(1) # Asinxron gecikmə
yield i # Dəyərin istehsalı
Asinxron generatördən istifadə
Asinxron generatörlərdən istifadə asinxron funksiyalar daxilində async for
operatoru vasitəsilə həyata keçirilir.
import asyncio
async def main():
async for value in async_generator():
print(value)
asyncio.run(main())
Asinxron generatörlər kodun oxunaqlığını və dəstəklənməsini artırır, asinxron ardıcıllıqlarla iş üçün sadə async for
sintaksis konstruksiyasını istifadə etməyə imkan verir.
GO TO FULL VERSION