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.

Tìm hiểu Event loop trong Python

Trong bài viết này, bạn sẽ học về vòng lặp sự kiện (event loop) trong Python và cách Python sử dụngevent loop để đạt được mô hình đồng thời (concurrency) chỉ với một luồng đơn (single thread). Bạn sẽ tìm hiểu cách thức hoạt động của gói tích hợp asyncio để chạy các tác vụ đồng thời, cho phép bạn tối ưu hóa hiệu suất và quản lý các tác vụ I/O hiệu quả hơn. Bằng cách hiểu và áp dụng event loop, bạn sẽ có thể xây dựng các ứng dụng Python hoạt động nhanh chóng và mượt mà, ngay cả khi xử lý nhiều tác vụ cùng một lúc.

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ề Event loop trong Python

Đồng thời (concurrency) nghĩa là nhiều tác vụ có thể chạy cùng một lúc. Gói tích hợp asyncio cho phép bạn chạy các tác vụ đồng thời chỉ với một luồng đơn.

Để đạt được mô hình đồng thời với một luồng đơn, gói asyncio sử dụng một cấu trúc gọi là vòng lặp sự kiện (event loop). Để hiểu cách event loop hoạt động, hãy xem xét ví dụ về việc ghi dữ liệu vào một file.

Khi ghi dữ liệu vào một file, bạn thực hiện các bước sau:

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

  • Mở file
  • Ghi dữ liệu vào file và chờ đợi cho đến khi hoàn thành
  • Đóng file

Trong luồng này, bước thứ hai là tác vụ chặn (blocking). Nội bộ, nó hoạt động như sau:

  • Hàm ghi dữ liệu vào file gửi dữ liệu đến hệ điều hành (OS).
  • Hệ điều hành tiếp quản và bắt đầu ghi dữ liệu vào file.
  • Hệ điều hành thông báo cho chương trình khi hoàn thành việc ghi file.

Để quản lý các thông báo, các hệ điều hành khác nhau sử dụng các hệ thống thông báo sự kiện khác nhau, ví dụ:

Hệ điều hành Hệ thống thông báo sự kiện
Linux epoll
Windows I/O completion port (IOCP)
macOS kqueue

Những hệ thống thông báo sự kiện này cho phép chúng ta đạt được đồng thời bằng cách sử dụng một luồng đơn. Trong khi chương trình chờ đợi hệ điều hành thông báo hoàn thành, nó có thể chạy mã khác.

Trong mô hình đồng thời với một luồng đơn, chúng ta chỉ có một luồng thực thi mã Python tại bất kỳ thời điểm nào. Khi gặp một tác vụ I/O-bound, chúng ta giao nó cho hệ thống thông báo sự kiện của hệ điều hành và chạy mã khác.

Khi tác vụ I/O-bound hoàn thành, chúng ta có thể tiếp tục tác vụ đang chờ kết quả và thực thi mã tiếp theo sau tác vụ I/O-bound đó.

Để theo dõi các tác vụ I/O-bound đang chờ kết quả, gói asyncio sử dụng event loop. Dưới đây là cách event loop hoạt động:

Screenshot 202024 07 26 20003404 png

Cách hoạt động

  • Luồng chính gửi các tác vụ vào hàng đợi tác vụ.
  • Event loop liên tục theo dõi hàng đợi tác vụ và chạy tác vụ cho đến khi gặp các tác vụ I/O. Trong trường hợp này, event loop tạm dừng tác vụ và giao nó cho hệ điều hành.
  • Kiểm tra các tác vụ I/O đã hoàn thành. Nếu tác vụ hoàn thành, hệ điều hành sẽ thông báo cho chương trình. Event loop sau đó chạy các tác vụ chưa được tạm dừng.

Các bước này lặp đi lặp lại cho đến khi hàng đợi tác vụ trống.

Trước Python 3.7, bạn cần tạo một event loop và chạy các tác vụ thủ công. May mắn thay, sau Python 3.7, gói asyncio cung cấp một số hàm cho phép bạn quản lý event loop tự động, vì vậy bạn không cần phải xử lý API cấp thấp.

Trong bài hướng dẫn tiếp theo, bạn sẽ học cách định nghĩa các coroutines bằng cách sử dụng từ khóa async và tạm dừng chúng bằng từ khóa await.

Kết bài

Sử dụng event loop là một cách hiệu quả để đạt được đồng thời trong Python mà không cần đến nhiều luồng. Bằng cách sử dụng gói asyncio, bạn có thể quản lý các tác vụ I/O-bound một cách hiệu quả hơn, giúp chương trình của bạn hoạt động mượt mà và tối ưu hơn. Điều này đặc biệt hữu ích trong các ứng dụng cần xử lý nhiều tác vụ I/O cùng lúc như các ứng dụng web, xử lý file, và kết nối mạng. Với sự trợ giúp của asyncio và event loop, bạn có thể tận dụng tối đa khả năng của Python để xây dựng các ứng dụng hiệu quả và mạnh mẽ.

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