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 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