CodeGym /Kurslar /Python SELF AZ /Asinxron iteratorlar və generatorlar

Asinxron iteratorlar və generatorlar

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

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 asyncawait 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 defyield 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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION