Xử lý đa luồng trong Python

Hướng dẫn chi tiết cách xử lý đa luồng trong Python bằng cách sử dụng thư viện `threading` và `concurrent.futures`. Bài viết này giúp bạn hiểu cách sử dụng đa luồng để tăng hiệu suất xử lý đồng thời trong các tác vụ.

Trong bài viết này, chúng ta sẽ tìm hiểu về cách xử lý đa luồng trong Python, giúp cải thiện hiệu suất cho các chương trình có tính chất xử lý đồng thời. Chúng ta sẽ sử dụng các thư viện threadingconcurrent.futures để triển khai các ví dụ minh họa.

Mã Python

1. Sử dụng thư viện threading

import threading
import time

def print_numbers():
    for i in range(1, 6):
        print(f"Số: {i}")
        time.sleep(1)

def print_letters():
    for letter in ['A', 'B', 'C', 'D', 'E']:
        print(f"Chữ cái: {letter}")
        time.sleep(1)

# Tạo hai luồng
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)

# Bắt đầu các luồng
thread1.start()
thread2.start()

# Đợi cho cả hai luồng hoàn thành
thread1.join()
thread2.join()

print("Hoàn tất xử lý đa luồng")

2. Sử dụng thư viện concurrent.futures

import concurrent.futures
import time

def process_task(task_name, duration):
    print(f"Bắt đầu {task_name}")
    time.sleep(duration)
    return f"Hoàn thành {task_name}"

with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
    futures = [executor.submit(process_task, f"Task {i+1}", 2) for i in range(2)]
    
    for future in concurrent.futures.as_completed(futures):
        print(future.result())

print("Hoàn tất xử lý đa luồng")

Giải thích chi tiết từng dòng code

Mã 1 - threading:

  • threading.Thread(target=...): Tạo luồng mới thực hiện hàm được chỉ định.
  • start(): Bắt đầu thực thi luồng.
  • join(): Đợi luồng kết thúc trước khi tiếp tục thực hiện đoạn mã tiếp theo.

Mã 2 - concurrent.futures:

  • ThreadPoolExecutor(max_workers=2): Tạo Thread Pool với 2 luồng.
  • executor.submit(...): Gửi một công việc vào Thread Pool để xử lý.
  • concurrent.futures.as_completed(futures): Lặp lại qua các công việc đã hoàn thành.

Yêu cầu hệ thống:

  • Python 3.6 trở lên

Cách cài đặt các thư viện để chạy được đoạn mã Python trên:

Cả hai thư viện threadingconcurrent.futures đều là các thư viện tiêu chuẩn, không cần cài đặt bổ sung.

Lời khuyên:

  • Đa luồng hữu ích khi cần xử lý các tác vụ I/O, nhưng có thể không hiệu quả với các tác vụ CPU-bound do GIL (Global Interpreter Lock).
  • Sử dụng concurrent.futures cho các tình huống đa luồng phức tạp để có được mã dễ đọc và bảo trì hơn.


Các Hướng Dẫn Cùng Chủ Đề Đang Xem

Chuyển chuỗi Markdown sang HTML bằng Python

Hướng dẫn cách chuyển đổi chuỗi Markdown sang HTML bằng Python với thư viện `markdown2`, giúp bạn dễ dàng tích hợp tính năng chuyển đổi này vào ứng dụng của mình.
Cách tự động đăng nhập vào website sử dụng Selenium với Chrome trong Python

Hướng dẫn cách sử dụng thư viện Selenium trong Python để tự động đăng nhập vào một website bằng Chrome. Bài viết bao gồm hướng dẫn từng bước và mã Python hoàn chỉnh.
Loại bỏ khoảng trống của hình ảnh (trim image) bằng Python

Hướng dẫn cách sử dụng Python để loại bỏ khoảng trống xung quanh hình ảnh (trim image) bằng thư viện OpenCV. Mã Python này giúp cắt bớt các vùng trắng hoặc khoảng trống xung quanh ảnh để làm nổi bật nội dung chính.
Các hàm thường dùng trong thư viện Pandas và cách sử dụng chúng

Bài viết này liệt kê các hàm quan trọng trong thư viện Pandas của Python và cung cấp hướng dẫn cách sử dụng chúng. Đây là một công cụ mạnh mẽ giúp xử lý và phân tích dữ liệu trong Python.
Cách loại bỏ MultiIndex columns trong Pandas

Bài viết này hướng dẫn cách loại bỏ các cột MultiIndex trong DataFrame của Pandas, một tính năng hữu ích khi làm việc với dữ liệu phức tạp có nhiều chỉ mục. Bạn sẽ học cách làm phẳng MultiIndex hoặc loại bỏ chúng hoàn toàn.
Tạo ứng dụng chat đơn giản sử dụng Socket.IO trong Python

Hướng dẫn chi tiết cách tạo ứng dụng chat đơn giản bằng Python sử dụng Socket.IO và Flask, cho phép người dùng gửi và nhận tin nhắn theo thời gian thực.
Cách GET data JSON từ API bằng Python

Bài viết này sẽ hướng dẫn bạn cách sử dụng Python để gửi yêu cầu GET đến một API và nhận dữ liệu JSON. Bạn sẽ học cách làm việc với các thư viện cần thiết và cách xử lý dữ liệu.
Hướng dẫn làm form đăng ký tài khoản trong Python bằng PyQT6

Hướng dẫn chi tiết cách tạo form đăng ký tài khoản trong Python sử dụng PyQT6, bao gồm cách thêm các trường nhập liệu và xử lý sự kiện khi người dùng nhấn nút đăng ký.
Ghi nội dung vào file Excel bằng Python

Hướng dẫn cách sử dụng Python để ghi dữ liệu vào file Excel một cách đơn giản bằng thư viện openpyxl, giúp bạn dễ dàng thao tác và quản lý dữ liệu Excel trong các dự án lập trình.
Xóa nền xanh cho hình ảnh bằng Python

Hướng dẫn cách sử dụng Python để xóa phông xanh (chroma key) khỏi hình ảnh bằng thư viện OpenCV. Mã Python này giúp bạn loại bỏ nền xanh để thay thế bằng nền khác hoặc làm cho nó trở nên trong suốt.

Đã thêm vào giỏ hàng