CodeGym /Kurslar /Python SELF AZ /Future Sinfi

Future Sinfi

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

8.1 Future sinfinin əsas xüsusiyyətləri

Future sinfi asyncio modulunda asinxron əməliyyatın nəticəsini təmsil edir, hansı ki gələcəkdə mövcud olacaq. Future obyektləri asinxron tapşırıqların vəziyyətini və nəticələrini idarə etmək üçün istifadə olunur.

Future sinfinin əsas xüsusiyyətləri

Future obyekti bir konteynerdir, hansı ki nəticəni saxlayır və o, tapşırıq icrasını bitirdikdən sonra mövcud olacaq. Bu nəticəni və ya istisnanı əldə etmək üçün interfeys təmin edir, hansı ki asinxron əməliyyat bitdikdən sonra qurulacaq.

Future obyektlərinin yaradılması və idarə olunması

  • Yaradılması: Adətən loop.create_future() istifadə edərək yaradılır.
  • Nəticənin təyin edilməsi: Nəticə set_result(result) metodu ilə təyin edilir.
  • İstisnanın təyin edilməsi: İstisna set_exception(exception) metodu ilə təyin edilir.

Əsas metodlar və atributlar

set_result(result):

Future obyekti üçün nəticəni təyin edir. Bu obyekti gözləyən bütün korutinlər dərhal həmin nəticə ilə bərpa olunacaq.

set_exception(exception):

Future obyekti üçün istisnanı təyin edir. Bu obyekti gözləyən bütün korutinlər dərhal həmin istisna ilə bərpa olunacaq.

result():

Əgər mövcuddursa, Future obyektinin nəticəsini qaytarır. Əgər əməliyyat istisna ilə tamamlanıbsa, həmin istisnanı çağıracaq.

exception():

Əgər təyin edilibsə, istisnanı qaytarır, əks halda None qaytarır. Əgər Future obyekti hələ tamamlanmayıbsa və ya uğurla tamamlanıbsa, nəticə None olacaq.

done():

Əgər Future obyekti tamamlanıbsa (nəticə və ya istisna ilə), True qaytarır.

add_done_callback(callback):

Future obyektinin tamamlanmasından sonra çağırılacaq callback əlavə edir.

8.2 İstifadə nümunələri

Quraşdırma və nəticənin alınması


import asyncio

async def set_future_result(fut, delay):
    await asyncio.sleep(delay)
    fut.set_result("Future nəticəsi hazırdır")
            
async def main():
    loop = asyncio.get_running_loop()
    fut = loop.create_future()
    asyncio.create_task(set_future_result(fut, 2))
    result = await fut
    print(result)
            
asyncio.run(main())

İstisnaların idarə olunması


import asyncio

async def set_future_exception(fut, delay):
    await asyncio.sleep(delay)
    fut.set_exception(ValueError("Xəta baş verdi"))
            
async def main():
    loop = asyncio.get_running_loop()
    fut = loop.create_future()
    asyncio.create_task(set_future_exception(fut, 2))
    try:
        result = await fut
    except ValueError as e:
        print(f"İstisna tutdum: {e}")

asyncio.run(main())

Tasks-larla qarşılıqlı əlaqə

Çox vaxt Future obyektləri Tasks ilə birlikdə istifadə olunur. asyncio.create_task() ilə tapşırıq yaradılanda, avtomatik olaraq bir Future obyekti yaradır, hansı ki, tapşırığın vəziyyətini izləmək və idarə etmək üçün istifadə oluna bilər.


import asyncio

async def example_coroutine():
    await asyncio.sleep(1)
    return "Task nəticəsi"
            
async def main():
    task = asyncio.create_task(example_coroutine())
    print(await task)
            
asyncio.run(main())

8.3 Üstünlüklər və xüsusiyyətlər

Future obyektləri asinxron əməliyyatların nəticələrini və istisnalarını idarə etməyə imkan verir, icra üzərində çeviklik və nəzarət təmin edir. Future asinxron proqramlaşdırmanın müxtəlif ssenarilərində, məsələn, tapşırıqlar, taymerlər, geriyə çağırışlar və daha çox şeydə istifadə oluna bilər.

Çox vaxt Future obyektləri (Tasks) tapşırıqlarla birlikdə istifadə olunur. Bu yanaşma asinxron əməliyyatların icrası və vəziyyəti üzərində daha yüksək nəzarət səviyyəsi əldə etməyə imkan verir.

Məhdudiyyətlər

Bəzi hallarda Future istifadəsi daha yüksək səviyyəli abstraksiyalardan, məsələn, Tasks və ya korutinlərdən istifadə ilə müqayisədə daha çətin ola bilər. Future istifadəsində asinxron əməliyyatların vəziyyətini və nəticələrini daha çox əl ilə idarə etmək lazım gələ bilər.

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