PYTHON CONCURRENCY
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Các đối tượng Future Asyncio trong Python

Trong bài viết này, bạn sẽ tìm hiểu về các đối tượng future trong Python asyncio và cách chúng hoạt động. Các đối tượng future cho phép bạn làm việc với các giá trị sẽ có trong tương lai, đặc biệt hữu ích trong các hoạt động bất đồng bộ. Việc hiểu rõ cách sử dụng future giúp bạn quản lý các tác vụ bất đồng bộ một cách hiệu quả, từ đó tối ưu hóa hiệu suất và sự mượt mà của các ứng dụng của bạn.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Giới thiệu về future trong Python asyncio

Một future là một đối tượng sẽ trả về một giá trị trong tương lai, không phải ngay bây giờ. Thông thường, một đối tượng future là kết quả của một hoạt động bất đồng bộ.

Ví dụ, bạn có thể gọi một API từ máy chủ từ xa và mong nhận được kết quả sau đó. Lời gọi API có thể trả về một đối tượng future để bạn có thể đợi nó.

Để tạo một đối tượng future, bạn sử dụng lớp Future từ gói asyncio. Hãy xem xét ví dụ sau:

Bài viết này được đăng tại [free tuts .net]

import asyncio
from asyncio import Future

async def main():
    my_future = Future()
    print(my_future.done())  # False

    my_future.set_result('Bright')

    print(my_future.done())  # True
    print(my_future.result())

asyncio.run(main())

Cách hoạt động

Đầu tiên, import lớp Future từ thư viện asyncio:

from asyncio import Future

Tiếp theo, tạo một đối tượng Future mới trong coroutine main():

my_future = Future()

Một đối tượng future mới được tạo ra chưa có giá trị vì nó chưa tồn tại. Trong trạng thái này, future được coi là chưa hoàn thành.

Sau đó, gọi phương thức done() để kiểm tra trạng thái của đối tượng future:

print(my_future.done())  # False

Nó trả về False.

Sau đó, đặt giá trị cho đối tượng future bằng cách gọi phương thức set_result():

my_future.set_result('Bright')

Khi bạn đặt giá trị, future đã hoàn thành. Gọi phương thức done() của đối tượng future trong giai đoạn này sẽ trả về True:

print(my_future.done())  # True

Cuối cùng, lấy kết quả từ đối tượng future bằng cách gọi phương thức result() của nó:

print(my_future.result())

Sử dụng future của asyncio với await trong Python

Khi bạn sử dụng từ khóa await với future, bạn sẽ tạm dừng future cho đến khi nó trả về một giá trị. Ví dụ sau đây cho thấy cách sử dụng future với từ khóa await:

from asyncio import Future
import asyncio

async def plan(my_future):
    print('Planning my future...')
    await asyncio.sleep(1)
    my_future.set_result('Bright')

def create() -> Future:
    my_future = Future()
    asyncio.create_task(plan(my_future))
    return my_future

async def main():
    my_future = create()
    result = await my_future
    print(result)

asyncio.run(main())

Cách hoạt động

Đầu tiên, định nghĩa một coroutine chấp nhận một future và đặt giá trị của nó sau 1 giây:

async def plan(my_future: Future):
    print('Planning my future...')
    await asyncio.sleep(1)
    my_future.set_result('Bright')

Thứ hai, định nghĩa hàm create() để lên lịch coroutine plan() như một tác vụ và trả về một đối tượng future:

def create() -> Future:
    my_future = Future()
    asyncio.create_task(plan(my_future))
    return my_future

Thứ ba, gọi hàm create() để trả về một future, sử dụng từ khóa await để đợi future trả về kết quả và hiển thị nó:

async def main():
    my_future = create()
    result = await my_future
    print(result)

Kết bài

Future là một đối tượng sẽ trả về một giá trị trong tương lai, không phải bây giờ. Future, Coroutine và Task đều là các đối tượng awaitable và có thể được sử dụng với từ khóa await. Việc nắm vững cách hoạt động của các đối tượng future trong Python asyncio không chỉ giúp bạn xử lý các tác vụ bất đồng bộ hiệu quả mà còn nâng cao khả năng xây dựng các ứng dụng mạnh mẽ và linh hoạt hơn.

Cùng chuyên mục:

Cách sử dụng lớp QTreeWidget của PyQt

Cách sử dụng lớp QTreeWidget của PyQt

Cách sử dụng lớp QTableWidget để tạo một bảng

Cách sử dụng lớp QTableWidget để tạo một bảng

Cách sử dụng lớp QListWidget trong Python

Cách sử dụng lớp QListWidget trong Python

Cách dùng lớp QStatusBar trong PyQt để tạo thanh status bar

Cách dùng lớp QStatusBar trong PyQt để tạo thanh status bar

Cách dùng lớp QDockWidget của PyQt để tạo một widget

Cách dùng lớp QDockWidget của PyQt để tạo một widget

Cách dùng lớp PyQt QToolBar để tạo các widget toolbar

Cách dùng lớp PyQt QToolBar để tạo các widget toolbar

Cách sử dụng lớp PyQt QMenu để tạo menu

Cách sử dụng lớp PyQt QMenu để tạo menu

Cách sử dụng lớp QMainWindow của PyQt để tạo cửa sổ

Cách sử dụng lớp QMainWindow của PyQt để tạo cửa sổ

Cách dùng lớp PyQt QFileDialog để tạo hộp thoại chọn file

Cách dùng lớp PyQt QFileDialog để tạo hộp thoại chọn file

Cách dùng lớp PyQt QInputDialog để tạo một hộp thoại nhập liệu

Cách dùng lớp PyQt QInputDialog để tạo một hộp thoại nhập liệu

Cách sử dụng lớp PyQt QMessageBox để tạo một hộp thoại

Cách sử dụng lớp PyQt QMessageBox để tạo một hộp thoại

Cách sử dụng lớp PyQt QProgressBar để tạo một widget progress bar

Cách sử dụng lớp PyQt QProgressBar để tạo một widget progress bar

Cách dùng lớp PyQt QTextEdit để tạo một widget cho phép chỉnh sửa

Cách dùng lớp PyQt QTextEdit để tạo một widget cho phép chỉnh sửa

Cách dùng lớp PyQt QGroupBox để tạo một khung nhóm với tiêu đề

Cách dùng lớp PyQt QGroupBox để tạo một khung nhóm với tiêu đề

Cách dùng lớp PyQt QTabWidget để tạo một widget dạng tab

Cách dùng lớp PyQt QTabWidget để tạo một widget dạng tab

Cách dùng PyQt QWidget để làm container chứa các widget khác.

Cách dùng PyQt QWidget để làm container chứa các widget khác.

Cách sử dụng lớp PyQt QSlider để tạo một widget thanh trượt (slider).

Cách sử dụng lớp PyQt QSlider để tạo một widget thanh trượt (slider).

Cách tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit

Cách tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit

Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit

Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit

Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit

Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit

Top