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 tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit

Cách tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit

Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit

Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit

Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit

Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit

Cách sử dụng widget PyQt QSpinBox để tạo một spin box

Cách sử dụng widget PyQt QSpinBox để tạo một spin box

Sử dụng PyQt QComboBox để tạo Widget Combobox

Sử dụng PyQt QComboBox để tạo Widget Combobox

Cách sử dụng lớp PyQt QRadioButton

Cách sử dụng lớp PyQt QRadioButton

Cách sử dụng lớp QCheckBox trong PyQt

Cách sử dụng lớp QCheckBox trong PyQt

Cách sử dụng QFormLayout trong PyQt

Cách sử dụng QFormLayout trong PyQt

Cách sử dụng QGridLayout trong PyQt

Cách sử dụng QGridLayout trong PyQt

Cách sử dụng QVBoxLayout trong PyQt

Cách sử dụng QVBoxLayout trong PyQt

Cách sử dụng widget QLineEdit trong PyQt

Cách sử dụng widget QLineEdit trong PyQt

Cách sử dụng widget QPushButton của PyQt

Cách sử dụng widget QPushButton của PyQt

Cách sử dụng widget PyQt QLabel

Cách sử dụng widget PyQt QLabel

Tín hiệu và Khe (Signals & Slots) trong PyQt

Tín hiệu và Khe (Signals & Slots) trong PyQt

PyQt là gì? Tạo một chương trình

PyQt là gì? Tạo một chương trình "Hello World".

Ứng dụng System Tray với Tkinter

Ứng dụng System Tray với Tkinter

Cách hiển thị đồ thị từ thư viện Matplotlib trong Tkinter

Cách hiển thị đồ thị từ thư viện Matplotlib trong Tkinter

Cách sử dụng Validate trong Tkinter

Cách sử dụng Validate trong Tkinter

Cấu trúc MVC trong Tkinter

Cấu trúc MVC trong Tkinter

Cách sử dụng widget PhotoImage của Tkinter

Cách sử dụng widget PhotoImage của Tkinter

Top