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 coroutine trong Python

Trong bài viết này, bạn sẽ học cách sử dụng các coroutine trong Python và cách sử dụng các từ khóa asyncawait để tạo và tạm dừng các coroutine. Các coroutine giúp bạn viết mã không đồng bộ, cho phép chương trình thực hiện nhiều tác vụ đồng thời mà không cần phải đợi từng tác vụ hoàn thành trước khi chuyển sang tác vụ tiếp theo. Điều này không chỉ cải thiện hiệu suất của chương trình mà còn giúp mã dễ đọc và bảo trì hơ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ề coroutine trong Python

Coroutine là một hàm thông thường nhưng có khả năng tạm dừng thực thi khi gặp một thao tác mất nhiều thời gian để hoàn thành. Khi thao tác dài hoàn thành, bạn có thể tiếp tục thực thi coroutine và chạy phần còn lại của mã trong coroutine đó. Trong khi coroutine đang chờ thao tác dài hoàn thành, bạn có thể chạy các mã khác, giúp chương trình chạy không đồng bộ và cải thiện hiệu suất.

Để tạo và tạm dừng một coroutine, bạn sử dụng các từ khóa asyncawait trong Python:

  • Từ khóa async để tạo coroutine.
  • Từ khóa await để tạm dừng coroutine.

Định nghĩa coroutine với từ khóa async trong Python

Đầu tiên, định nghĩa một hàm đơn giản trả về bình phương của một số nguyên:

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

def square(number: int) -> int:
    return number * number

Bạn có thể truyền một số nguyên vào hàm square() để lấy giá trị bình phương của nó:

result = square(10)
print(result)

Đầu ra:

100

Khi bạn thêm từ khóa async vào hàm, hàm này sẽ trở thành một coroutine:

async def square(number: int) -> int:
    return number * number

Khi gọi coroutine, Python sẽ không thực thi ngay lập tức mà trả về một đối tượng coroutine:

async def square(number: int) -> int:
    return number * number

result = square(10)
print(result)

Đầu ra:

<coroutine object square at 0x00000185C31E7D80>
sys:1: RuntimeWarning: coroutine 'square' was never awaited

Để chạy coroutine, bạn cần thực thi nó trên một vòng lặp sự kiện (event loop). Từ phiên bản Python 3.7, thư viện asyncio cung cấp hàm asyncio.run() để tự động tạo và quản lý vòng lặp sự kiện, thực thi coroutine và đóng vòng lặp sự kiện.

Ví dụ, sử dụng hàm asyncio.run() để thực thi coroutine square() và lấy kết quả:

import asyncio

async def square(number: int) -> int:
    return number * number

result = asyncio.run(square(10))
print(result)

Đầu ra:

100

Tạm dừng coroutine với từ khóa await trong Python

Từ khóa await dùng để tạm dừng thực thi của một coroutine. Nó được theo sau bởi một lời gọi đến một coroutine khác:

result = await my_coroutine()

Từ khóa await khiến my_coroutine() thực thi, chờ đợi kết quả và trả về kết quả khi hoàn thành.

Lưu ý rằng từ khóa await chỉ hợp lệ bên trong một coroutine. Điều này giải thích vì sao trong ví dụ trước, việc sử dụng từ khóa await bên ngoài coroutine đã gây ra lỗi.

Ví dụ, sử dụng từ khóa await để tạm dừng coroutine:

import asyncio

async def square(number: int) -> int:
    return number * number

async def main() -> None:
    x = await square(10)
    print(f'x={x}')

    y = await square(5)
    print(f'y={y}')

    print(f'total={x + y}')

if __name__ == '__main__':
    asyncio.run(main())

Đầu ra:

x=100
y=25
total=125

Kết bài

Coroutine là một hàm thông thường với khả năng tạm dừng một thao tác dài, chờ kết quả và tiếp tục từ điểm tạm dừng. Để định nghĩa một coroutine, bạn sử dụng từ khóa async. Để tạm dừng một coroutine và chờ kết quả, bạn sử dụng từ khóa await. Cuối cùng, để tự động thực thi một coroutine trên một vòng lặp sự kiện và quản lý vòng lặp sự kiện, bạn sử dụng hàm asyncio.run(). Với các từ khóa asyncawait, bạn có thể dễ dàng viết mã không đồng bộ trong Python, giúp cải thiện hiệu suất và khả năng quản lý của chương trình.

Cùng chuyên mục:

Cách lưu trữ và tải lại Models trong PyTorch

Cách lưu trữ và tải lại Models trong PyTorch

Tìm hiểu về TensorBoard với PyTorch

Tìm hiểu về TensorBoard với PyTorch

Học chuyển giao (Transfer Learning) trong PyTorch Beginner

Học chuyển giao (Transfer Learning) trong PyTorch Beginner

Hướng dẫn cơ bản mạng Nơ-ron Tích Chập (CNN) trong PyTorch

Hướng dẫn cơ bản mạng Nơ-ron Tích Chập (CNN) trong PyTorch

Mạng Nơ-Ron truyền thẳng (Feed Forward Neural Network) trong PyTorch

Mạng Nơ-Ron truyền thẳng (Feed Forward Neural Network) trong PyTorch

Tìm hiểu Activation Functions trong PyTorch

Tìm hiểu Activation Functions trong PyTorch

Softmax và Cross Entropy trong PyTorch Beginner

Softmax và Cross Entropy trong PyTorch Beginner

Dataset Transforms trong PyTorch Beginner

Dataset Transforms trong PyTorch Beginner

Dataset và DataLoader trong PyTorch Beginner

Dataset và DataLoader trong PyTorch Beginner

Hồi quy Logistic trong PyTorch Beginner

Hồi quy Logistic trong PyTorch Beginner

Hồi quy tuyến tính trong PyTorch Beginner

Hồi quy tuyến tính trong PyTorch Beginner

Training Pipeline trong PyTorch Beginner

Training Pipeline trong PyTorch Beginner

Sử dụng Gradient Descent với Autograd trong PyTorch

Sử dụng Gradient Descent với Autograd trong PyTorch

Hướng dẫn về Tensor cơ bản trong PyTorch

Hướng dẫn về Tensor cơ bản trong PyTorch

Hướng dẫn cài đặt PyTorch với Deep Learning

Hướng dẫn cài đặt PyTorch với Deep Learning

LDA (Linear Discriminant Analysis) trong Python

LDA (Linear Discriminant Analysis) trong Python

Thuật toán AdaBoost trong Python

Thuật toán AdaBoost trong Python

Thuật toán K-Means Clustering trong Python

Thuật toán K-Means Clustering trong Python

Triển khai PCA bằng Python

Triển khai PCA bằng Python

Triển khai thuật toán Random Forest bằng Python

Triển khai thuật toán Random Forest bằng Python

Top