در برنامهنویسی با استفاده از کتابخانه asyncio در پایتون، Future یک شیء است که نشاندهنده یک مقدار یا یک استثنا است که در آینده قابل دسترسی خواهد بود. Future ها معمولاً توسط کوروتینها یا توابعی که با async تعریف شدهاند و با await فراخوانی میشوند، استفاده میشوند.
ایجاد و استفاده از یک Future
مقادیری که در آینده قرار است محاسبه شوند را در آن نگه میداریم. یا مقدار دارد یا ندارد. در صورتی که نداشته باشد به عنوان انجام نشده و اگر مقدار داشته باشد به عنوان انجام شده در نظر گرفته میشود.
به تکه کد زیر توجه کنید.
import asyncio
# ایجاد یک شیء Future
f = asyncio.Future()
# تنظیم نتیجه Future
f.set_result(1)
# دسترسی به نتیجه
print(f, f.result())
در کد بالا:
- یک
Futureایجاد شده و سپس نتیجه آن باset_resultتنظیم شده است. - پس از تنظیم نتیجه، میتوان با استفاده از
result()به آن دسترسی پیدا کرد.
خروجی این کد شبیه به زیر است
DeprecationWarning: There is no current event loop
f = asyncio.Future()
<Future pending>
دلیل این warning این هست که ما این future را در هیچ event loop ای نساخته ایم. هر future باید در یک event loop ساخته شود. با کمی تغییر در کد بالا میتوان این مشکل را حل کرد.
import asyncio
async def main():
f = asyncio.Future()
f.set_result(1)
print(f, f.result())
asyncio.run(main())