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 thêm Progress Bar trong Python với chỉ một dòng Code

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Cách nạp dữ liệu Machine Learning từ File trong Python

Cách nạp dữ liệu Machine Learning từ File trong Python

Hướng dẫn sử dụng Google Sheets API với Python

Hướng dẫn sử dụng Google Sheets API với Python

Xây dựng  web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn viết Snake Game bằng Python

Hướng dẫn viết Snake Game bằng Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng Python Debugger với hàm breakpoint()

Cách sử dụng Python Debugger với hàm breakpoint()

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hỗ trợ Async trong Django 3.1

Hỗ trợ Async trong Django 3.1

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

Ý nghĩa của if __name__ ==

Ý nghĩa của if __name__ == "__main__" trong Python

Cách xóa phần tử trong danh sách Python

Cách xóa phần tử trong danh sách Python

Top