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 luồng Daemon trong Python

Trong bài viết này, bạn sẽ học về các luồng daemon trong Python và cách sử dụng chúng hiệu quả. Python cung cấp khả năng tạo và quản lý các luồng, cho phép bạn thực hiện các tác vụ đồng thời. Điều này đặc biệt hữu ích khi bạn muốn thực hiện các tác vụ ở chế độ nền mà không ảnh hưởng đến luồng chính của chương trình. Bằng cách sử dụng các luồng daemon, bạn có thể đảm bảo rằng các tác vụ nền này sẽ tự động kết thúc khi chương trình chính kết thúc, giúp tối ưu hóa hiệu suất và quản lý tài nguyên hiệu quả 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ề luồng daemon trong Python

Trong Python, mọi chương trình đều có ít nhất một luồng gọi là luồng chính (main thread). Để tạo một chương trình có nhiều luồng, bạn sử dụng module threading. Bằng cách sử dụng nhiều luồng, bạn có thể thực hiện các tác vụ đồng thời.

Đôi khi, bạn muốn thực hiện một tác vụ ở chế độ nền. Để làm điều đó, bạn sử dụng một loại luồng đặc biệt gọi là luồng daemon.

Theo định nghĩa, các luồng daemon là các luồng chạy ở chế độ nền. Nói cách khác, các luồng daemon thực hiện các tác vụ ở chế độ nền.

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

Các luồng daemon rất hữu ích cho việc thực hiện các tác vụ hỗ trợ cho các luồng không phải daemon trong chương trình. Ví dụ:

  • Ghi log thông tin vào một tệp ở chế độ nền.
  • Thu thập nội dung từ một trang web ở chế độ nền.
  • Tự động lưu dữ liệu vào cơ sở dữ liệu ở chế độ nền.

Tạo một luồng daemon trong Python

Để tạo một luồng daemon, bạn đặt thuộc tính daemon thành True trong hàm khởi tạo Thread:

t = Thread(target=f, daemon=True)

Hoặc, bạn có thể đặt thuộc tính daemon thành True sau khi tạo đối tượng Thread:

t = Thread(target=f)
t.daemon = True

Ví dụ về luồng daemon trong Python

Ví dụ sau đây cho thấy cách tạo một luồng không phải daemon để hiển thị số giây mà chương trình đã chờ:

from threading import Thread
import time

def show_timer():
    count = 0
    while True:
        count += 1
        time.sleep(1)
        print(f'Đã chờ {count} giây...')

t = Thread(target=show_timer)
t.start()

answer = input('Bạn có muốn thoát không?\n')

Cách hoạt động:

Đầu tiên, định nghĩa một hàm show_timer() để hiển thị số giây mà chương trình đã chờ.

Sau đó, tạo một luồng mới để thực thi hàm show_timer():

t = Thread(target=show_timer)

Tiếp theo, khởi động luồng:

t.start()

Cuối cùng, gọi hàm input() để nhắc người dùng nhập liệu:

answer = input('Bạn có muốn thoát không?\n')

Nếu bạn chạy chương trình, nó sẽ hiển thị kết quả sau và chạy mãi mãi:

Bạn có muốn thoát không?Đã chờ 1 giây...
Đã chờ 2 giây...
Đã chờ 3 giây...
Đã chờ 4 giây...
Y
Đã chờ 5 giây...
Đã chờ 6 giây...

Để kết thúc chương trình, bạn cần phải dừng terminal.

Chương trình chạy vô hạn vì luồng t là một luồng không phải daemon. Chương trình cần chờ tất cả các luồng không phải daemon hoàn thành trước khi thoát.

Bây giờ, hãy biến đổi luồng này thành một luồng daemon:

from threading import Thread
import time

def show_timer():
    count = 0
    while True:
        count += 1
        time.sleep(1)
        print(f'Đã chờ {count} giây...')

t = Thread(target=show_timer, daemon=True)
t.start()

answer = input('Bạn có muốn thoát không?\n')

Nếu bạn chạy chương trình, nhập liệu và nhấn enter, chương trình sẽ kết thúc. Ví dụ:

Bạn có muốn thoát không?
Đã chờ 1 giây...
Y

Chương trình kết thúc vì nó không cần chờ luồng daemon hoàn thành. Ngoài ra, luồng daemon sẽ tự động bị dừng khi chương trình thoát.

Sự khác biệt giữa luồng daemon và luồng không phải daemon trong Python

Bảng dưới đây minh họa sự khác biệt giữa luồng daemon và luồng không phải daemon:

Luồng Daemon Luồng Không Phải Daemon
Tạo luồng t = Thread(target=f, daemon=True)
Chương trình cần chờ trước khi thoát Không
Loại tác vụ

Không quan trọng như ghi log

Kết bài

Luồng daemon là một công cụ hữu ích trong Python để xử lý các tác vụ nền không quan trọng. Với khả năng tự động dừng khi chương trình chính kết thúc, luồng daemon giúp đảm bảo rằng các tài nguyên được giải phóng đúng cách và chương trình có thể thoát mà không cần chờ đợi. Điều này giúp tối ưu hóa hiệu suất và quản lý tài nguyên hiệu quả, đặc biệt là khi xử lý các tác vụ không quan trọng như ghi log, quét dữ liệu hoặc tự động lưu dữ liệu. Việc sử dụng luồng daemon đúng cách sẽ giúp bạn xây dựng các ứng dụng Python mạnh mẽ và hiệu quả hơn.

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