Future در پایتون، بهخصوص در ماژول asyncio، نمایندهای برای نتیجهای است که هنوز محاسبه نشده است. این مفهوم به شما این امکان را میدهد که یک کار را در آینده انجام دهید و در عین حال میتوانید بهصورت غیرهمزمان منتظر نتیجه آن باشید.
تعریف Future
یک Future نمایندهای از یک عملیات غیرهمزمان است که ممکن است در حال حاضر در حال اجرا باشد یا هنوز آغاز نشده باشد. وقتی که یک Future تکمیل میشود، میتوانید به نتیجه آن دسترسی پیدا کنید یا به استثنائاتی که در حین اجرای آن ایجاد شدهاند، رسیدگی کنید.
نحوه استفاده از Future
در asyncio، Future معمولاً در پسزمینه توسط حلقه رویداد (event loop) مدیریت میشود، اما شما میتوانید بهطور مستقیم با آن کار کنید. برای ایجاد یک Future، میتوانید از متد loop.create_future() استفاده کنید.
مثال از نحوه استفاده از Future
در اینجا یک مثال ساده از نحوه استفاده از Future آورده شده است:
import asyncio
async def set_future_result(future):
    await asyncio.sleep(2)  # شبیهسازی کار غیرهمزمان
    future.set_result("Result is ready!")  # تنظیم نتیجه
async def main():
    loop = asyncio.get_running_loop()
    future = loop.create_future()  # ایجاد یک Future جدید
    # راهاندازی coroutine برای تنظیم نتیجه
    asyncio.create_task(set_future_result(future))
    print("Waiting for the result...")
    result = await future  # منتظر نتیجه
    print(f"Received: {result}")
asyncio.run(main())
توضیحات
- 
	تعریف coroutine: - set_future_result: این coroutine یک تأخیر 2 ثانیهای را شبیهسازی میکند و سپس نتیجه را برای- Futureتنظیم میکند.
 
- 
	ایجاد Future:- در تابع main، با استفاده ازloop.create_future()یکFutureجدید ایجاد میشود.
 
- در تابع 
- 
	ایجاد یک task جدید: - با استفاده از asyncio.create_task(set_future_result(future))، coroutine برای تنظیم نتیجهFutureراهاندازی میشود.
 
- با استفاده از 
- 
	منتظر نتیجه: - با استفاده از await future، برنامه منتظر میماند تا نتیجهFutureتنظیم شود و سپس آن را دریافت و چاپ میکند.
 
- با استفاده از 
مزایای استفاده از Future
- 
	غیرهمزمانی: - Futureبه شما اجازه میدهد تا با کارهای غیرهمزمان به راحتی کار کنید و در عین حال انتظار نتایج را به روشی ساختاریافته مدیریت کنید.
 
- 
	مدیریت استثناها: - Futureمیتواند استثناهای رخ داده در حین اجرای coroutine را مدیریت کند و شما میتوانید با استفاده از متد- exception()به آنها دسترسی پیدا کنید.
 
- 
	ساختار بهتر: - استفاده از Futureدر مقایسه با رویکردهای سنتی، مانند استفاده از callbackها، کد را خواناتر و سازمانیافتهتر میکند. با استفاده ازasync/await، کد شبیه به کد همزمان به نظر میرسد.
 
- استفاده از 
- 
	تغییر حالت: - Futureبه شما اجازه میدهد که به راحتی وضعیت کارهای غیرهمزمان را تغییر دهید و به آنها رسیدگی کنید، مانند لغو یا توقف یک کار در حال اجرا.
 
مدیریت خطا در Future به شما این امکان را میدهد که بهراحتی با استثناهایی که در حین اجرای coroutineها رخ میدهند، برخورد کنید. در اینجا یک مثال از نحوه مدیریت خطا در Future آورده شده است.
import asyncio
async def set_future_result(future):
    await asyncio.sleep(2)  # شبیهسازی کار غیرهمزمان
    # ایجاد یک استثنا برای شبیهسازی خطا
    future.set_exception(ValueError("An error occurred!"))  # تنظیم استثنا
async def main():
    loop = asyncio.get_running_loop()
    future = loop.create_future()  # ایجاد یک Future جدید
    # راهاندازی coroutine برای تنظیم نتیجه یا استثنا
    asyncio.create_task(set_future_result(future))
    print("Waiting for the result...")
    try:
        result = await future  # منتظر نتیجه
        print(f"Received: {result}")
    except Exception as e:
        print(f"Caught an exception: {e}")
asyncio.run(main())
Future ابزاری قدرتمند در ماژول asyncio است که به شما این امکان را میدهد تا بهصورت غیرهمزمان با نتایج کارها کار کنید و در عین حال از مدیریت استثناها و تغییر وضعیت بهراحتی بهرهمند شوید. با استفاده از Future، میتوانید برنامههای پیچیده و مقیاسپذیری را توسعه دهید که عملکرد مناسبی داشته باشند.