CodeGym /Kurslar /Python SELF AZ /Populyar asyncio metodları

Populyar asyncio metodları

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

4.1 run() metodu

asyncio modulu çox sayda metod və funksiyalar təqdim edir asinxron proqramların yaradılması və idarə olunması üçün. Gəlin indi asyncio modulunun ən çox istifadə olunan və məşhur metodlarından bəzilərinə nəzər yetirək.

Bu gün 4 ən çox istifadə ediləni araşdıracağıq:

  • run()
  • sleep()
  • wait()
  • gather()

İndi isə ətraflı:

asyncio.run(coroutine) metodu

Bu metod asinxron proqramın başladılması üçün istifadə olunur. O, xüsusilə asinxron kodu sinxron kontekstdən, məsələn, əsas proqram axınından çalışdırmaq istədikdə faydalıdır.

asyncio.run() metodu əsas korutini işə salır və hadisə dövrəsinin yaradılması və bağlanmasını idarə edir. Bu metod avtomatik olaraq yeni bir hadisə dövrəsi yaradır və korutinin icrası tamamlandıqda onu bağlayır.

İşarələmə:


asyncio.run(async_function(), *, debug=False)
        
  • async_function: İcra edilməsi lazım olan korutini.
  • debug: Hadisə dövrəsi üçün debugging rejimini aktivləşdirən isteğe bağlı parametr.

İstifadə nümunəsi:


import asyncio

async def main():
    print('Salam')
    await asyncio.sleep(1)
    print('Dünya')
            
asyncio.run(main())
        

Məhdudiyyətlər

Başqa bir hadisə dövrəsinin içindən çağırmaq olmaz:

asyncio.run() yalnız sinxron koddan çağırılmalıdır, çünki o, öz hadisə dövrəsini yaradır və bağlayır. Əgər artıq mövcud olan hadisə dövrəsinin içindən çağırmağa çalışsanız, bu, səhv yaradacaq.

Yalnız üst səviyyə üçün uyğundur:

Bu metod əsas proqram girişinin başladılması üçün nəzərdə tutulub və asinxron funksiyaların iç-içə çağırışları üçün istifadə olunmamalıdır.

4.2 sleep() metodu

Bu metod, bir korutinin icrasını müəyyən bir müddət üçün dayandırmaq, lakin digər korutinlərin icrasını blok etməmək lazım olduğunda istifadə olunur.

asyncio.sleep() metodu asyncio modulunda mövcuddur və cari korutinin icrasını təyin olunmuş saniyələr üçün dayandırmaq üçün istifadə olunur.

Bu metod, time.sleep() metoduna bənzəyir, amma fərqli olaraq dayanma müddətində digər tapşırıqların yerinə yetirilməsinə imkan yaradır. Bu, asinxron proqramların yazılması üçün faydalıdır, xüsusilə gecikmə və ya əsas axını bloklamadan gözləmə tələb edən vəziyyətlərdə.

İmza strukturu:


asyncio.sleep(delay, result=None)
        
  • delay: Gecikmə müddəti saniyələrdə (ondalıq ədəd ola bilər).
  • result: Opsiyonel nəticə, gecikmə bitdikdə geri qaytarılacaq.

İstifadə nümunəsi:


import asyncio

async def main():
    print('Başlayıram yatmağa')
    await asyncio.sleep(2)
    print('Oyanıram')
            
asyncio.run(main())
        

Bu nümunədə, main korutini 2 saniyəlik dayandırılır, bu müddətdə digər tapşırıqların icrasına imkan yaradır, sonra davam edir və "Oyanıram" mesajını çap edir.

4.3 wait() metodu

Bu metod bir neçə asinxron əməliyyatın tamamlanmasını gözləməyə ehtiyacın olduqda, amma gözləmə prosesinə daha incə nəzarət etmək istədikdə faydalıdır.

asyncio.wait() metodu asyncio modulunda bir neçə asinxron tapşırığın və ya korutinin tamamlanmasını gözləməyə imkan verir. Bütün tapşırıqların, ilk tamamlanmış tapşırığın və ya səhvlə tamamlanmış hər hansı bir tapşırığın tamamlanmasını gözləyə bilər.

gather() metodundan fərqli olaraq, wait() metodu gözləmə prosesinə daha çox nəzarət edir, timeout və tamamlanma şərtlərini təyin etməyə imkan verir.

asyncio.wait() metodunun əsas xüsusiyyətləri

İmza:


asyncio.wait(fs, *, timeout=None, return_when=ALL_COMPLETED)
        

Harada:

  • fs: Gözləməli olduğunuz Future obyektlərinin və ya korutinlərin kolleksiyası.
  • timeout: İxtiyari parametr, saniyə ilə maksimum gözləmə müddətini göstərir. Əgər gözləmə müddəti bitərsə, metod həmin ana qədər tamamlanmış tapşırıqları qaytarır.
  • return_when: Metodun nə vaxt bitəcəyini müəyyən edən şərt. Mümkün dəyərlər:
    • ALL_COMPLETED: Bütün tapşırıqlar yerinə yetirildikdə metod nəticəni qaytarır (standart olaraq).
    • FIRST_COMPLETED: İlk tamamlanmış tapşırıq başa çatdıqda metod nəticəni qaytarır.
    • FIRST_EXCEPTION: Hər hansı bir tapşırıq istisna ilə tamamlandıqda metod nəticəni qaytarır.

Bir neçə tapşırığın və ya korutinin tamamlanmasını gözləyir. Gözləmə müddətini və tamamlanma şərtlərini təyin etmək mümkündür.


import asyncio

async def say(what, delay):
    await asyncio.sleep(delay)
    return what
            
async def main():
    task1 = asyncio.create_task(say('salam', 1)) 
    task2 = asyncio.create_task(say('dünya', 2))
    done, pending = await asyncio.wait([task1, task2], timeout=1.5)
    for task in done:
        print(task.result())
            
asyncio.run(main())
        

Yuxarıdakı nümunədə hər bir say() korutinini create_task() metodu vasitəsilə Task obyektinə çeviririk və bu taskların siyahısını wait() metoduna ötürürük. Task obyektləri korutinləri paralel icra etməyə imkan verir, birinin başa çatmasını gözləmədən digərini başlada bilir.

wait metodu tapşırıqların icrasını yalnız 1.5 saniyə gözləyəcək, sonra isə tapşırıqları qaytaracaq: kortecin birinci dəyərində tamamlanmış tapşırıqlar (done), ikinci dəyərində isə prosesdə olan tapşırıqlar (pending) olacaq.

4.4 gather() Metodu

Bu metod xüsusilə bir neçə asinxron əməliyyatı paralel olaraq işə salmaq və onların nəticələrini siyahı şəklində almaq lazım olduqda faydalıdır.

asyncio.gather() metodu asyncio modulunda bir neçə asinxron tapşırığı paralel olaraq icra etmək üçün istifadə olunur və nəticələri siyahı şəklində geri qaytarır. Bu korutinləri və ya tapşırıqları qruplaşdırmaq və onların tamamlanmasını gözləmək üçün rahat üsuldur.

asyncio.gather() metodunun əsas xüsusiyyətləri

İşləmə forması:


asyncio.gather(*coros_or_futures, return_exceptions=False)
        

Burada:

  • coros_or_futures: İcrası lazım olan korutinlər və ya Future obyektləri.
  • return_exceptions: İstisnaların nəticə kimi geri qaytarılıb-qaytarılmaması barədə qərar verən bool dəyər. Default olaraq False (yanlış).

İstifadə nümunəsi


import asyncio

async def say_after(delay, what):
    await asyncio.sleep(delay)
    return what
            
async def main():
    results = await asyncio.gather(
        say_after(1, 'salam'),
        say_after(2, 'dünya')
    )
    print(results)
            
asyncio.run(main())
        

Bu nümunə göstərir ki, asyncio.gather bir neçə tapşırığı paralel şəkildə icra etmək üçün istifadə oluna bilər. Hər bir tapşırıq öz gecikməsi ilə icra olunur. Bütün tapşırıqların nəticələri siyahı şəklində qaytarılır. wait metodundan fərqli olaraq, gather yalnız tapşırıqların tamamlanmasını gözləmir, həm də bütün korutinlərin nəticələrini toplayır, bu isə tapşırıqların hər birinin nəticəsi vacib olduqda onu daha əlverişli edir.

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