Daemon trong chủ đề python là gì?
Trong bài viết này, tôi sẽ thảo luận về các chuỗi Daemon trong Python với các ví dụ. Vui lòng đọc bài viết trước của chúng tôi, nơi chúng tôi đã thảo luận về Các phương thức quan trọng của lớp Thread trong Python.
Chủ đề Daemon là gì?Khi một chương trình đang chạy, có một số quy trình, liên quan đến chương trình, sẽ chạy trong nền hỗ trợ thực thi chương trình. Các luồng hoặc quy trình đang chạy trong nền này được gọi là Chủ đề Daemon. Mục tiêu chính của Chủ đề Daemon là cung cấp hỗ trợ cho Chủ đề không phải Daemon (như chủ đề chính) Show Ví dụ. người thu gom rácBất cứ khi nào Main Thread chạy với bộ nhớ thấp, ngay lập tức PVM sẽ chạy Garbage Collector để tiêu diệt các đối tượng vô dụng và cung cấp bộ nhớ trống, để Main Thread có thể tiếp tục thực thi mà không gặp bất kỳ sự cố nào về bộ nhớ Chúng ta có thể kiểm tra xem thread có phải là Daemon hay không bằng cách sử dụng phương thức isDaemon() của lớp Thread và cũng bằng cách sử dụng thuộc tính daemon Chương trình. Kiểm tra Thread có phải là Daemon hay không trong Python (demo14. py) from threading import * print(current_thread().isDaemon()) print(current_thread().daemon) đầu ra Ghi chú. Chủ đề chính luôn là chủ đề Non-Daemon phương thức setDaemon() trong pythonChúng ta có thể thay đổi bản chất Daemon bằng cách sử dụng phương thức setDaemon() của lớp Thread. Ở góc độ này, hãy biết một số điểm Chúng ta phải đặt một luồng làm Daemon trước khi khởi động nó. Khi một luồng bắt đầu, chúng ta không thể thay đổi bản chất Daemon của nó. Nếu chúng tôi cố gắng thay đổi, chúng tôi sẽ nhận được RuntimeError. không thể đặt trạng thái daemon của chủ đề đang hoạt động Chương trình. phương thức setDaemon() của lớp Thread trong Python (demo15. py) from threading import * def display(): print("Child Thread") t=Thread(target=display) t.start() t.setDaemon(True) đầu ra. Một số điểm cần lưu ý
from threading import * import time def display(): for i in range(5): print("Child Thread") time.sleep(2) t=Thread(target=display) #t.setDaemon(True) t.start() time.sleep(5) print("End Of Main Thread") đầu ra Trong chương trình trên, luồng con, sẽ kế thừa bản chất daemon của nó từ luồng cha i. e Chủ đề chính, theo mặc định. Vì cả cha và con đều không phải daemon nên chúng sẽ được thực thi hoàn toàn Chương trình. Main Thread luôn là Non-Daemon Thread trong Python (demo17. py)from threading import * import time def display(): for i in range(5): print("Child Thread") time.sleep(2) t=Thread(target=display) t.setDaemon(True) t.start() time.sleep(5) print("End Of Main Thread") đầu ra Trong chương trình này, chúng tôi đã thay đổi trạng thái daemon của luồng con thành True trước khi khởi động nó Luồng chính, không phải daemon, được hoàn thành nhanh hơn luồng con, không phải daemon. Sau khi thực thi một luồng không phải daemon, ngay lập tức quá trình thực thi luồng daemon bị dừng Trong bài viết tiếp theo, tôi sẽ thảo luận về Đồng bộ hóa trong Python. Ở đây, trong bài viết này, tôi cố gắng giải thích các luồng Daemon quan trọng trong Python bằng các ví dụ. Tôi hy vọng bạn thích chủ đề Daemon này trong Python với bài viết Ví dụ. Tôi muốn có phản hồi của bạn. Vui lòng gửi phản hồi, câu hỏi hoặc nhận xét của bạn về bài viết này Chào mọi người. Trong bài viết hôm nay, chúng ta sẽ xem xét việc sử dụng Daemon Threads trong Python. Trước khi chúng ta bắt đầu với chủ đề chính, trước tiên chúng ta hãy xem Daemon Thread là gì chủ đề daemonDaemon Thread là một loại thread có thể chạy độc lập trong nền. Các loại luồng này thực thi độc lập với luồng chính. Vì vậy, chúng được gọi là chủ đề không chặn Khi nào bạn có thể cần chuỗi Daemon trong Python? Giả sử bạn cần có một tác vụ chạy dài cố đọc các tệp nhật ký. Tác vụ này phải thông báo cho người dùng khi phát hiện thông báo lỗi trong nhật ký Chúng tôi có thể chỉ định một chuỗi daemon cho tác vụ này, chuỗi này có thể tiếp tục theo dõi các tệp nhật ký của chúng tôi, trong khi chương trình chính của chúng tôi thực hiện công việc bình thường Phần tốt nhất về các luồng daemon là chúng sẽ tự động dừng thực thi sau khi chương trình chính kết thúc Trong trường hợp bạn cần một tác vụ ngắn, một luồng daemon sẽ ngừng thực thi sau khi nó quay trở lại. Tuy nhiên, do tính chất này, các luồng daemon được sử dụng rộng rãi cho các tác vụ nền chạy dài Bây giờ, hãy xem một ví dụ cho thấy cách chúng ta có thể sử dụng chúng trong Python Sử dụng Chủ đề Daemon trong Python – Triển khai thực hànhCác ví dụ này trong Python sẽ sử dụng mô-đun luồng trong Python, là một phần của thư viện chuẩn import threading Để minh họa sức mạnh của luồng daemon, trước tiên hãy tạo hai luồng A và B Chúng tôi sẽ làm cho luồng A thực hiện một phép tính ngắn, trong khi luồng B cố gắng giám sát tài nguyên được chia sẻ Nếu tài nguyên này được đặt thành import threading import time # Set the resource to False initially shared_resource = False # A lock for the shared resource lock = threading.Lock() def perform_computation(): # Thread A will call this function and manipulate the resource print(f'Thread {threading.currentThread().name} - performing some computation....') shared_resource = True print(f'Thread {threading.currentThread().name} - set shared_resource to True!') print(f'Thread {threading.currentThread().name} - Finished!') time.sleep(1) def monitor_resource(): # Thread B will monitor the shared resource while shared_resource == False: time.sleep(1) print(f'Thread {threading.currentThread().name} - Detected shared_resource = False') time.sleep(1) print(f'Thread {threading.currentThread().name} - Finished!') if __name__ == '__main__': a = threading.Thread(target=perform_computation, name='A') b = threading.Thread(target=monitor_resource, name='B') # Now start both threads a.start() b.start() Ở đây, Chủ đề A sẽ đặt from threading import * def display(): print("Child Thread") t=Thread(target=display) t.start() t.setDaemon(True)0 thành True và chủ đề B sẽ đợi tài nguyên này là Trueđầu ra Thread A - performing some computation.... Thread A - set shared_resource to True! Thread A - Finished! Thread B - Detected shared_resource = False Thread B - Finished! Lưu ý rằng cả hai chủ đề là chủ đề bình thường. Bây giờ, hãy biến luồng B thành luồng daemon. Hãy xem những gì xảy ra bây giờ Để làm điều này, chúng ta có thể đặt nó làm tham số trong phương thức from threading import * def display(): print("Child Thread") t=Thread(target=display) t.start() t.setDaemon(True)2 import threading import time shared_resource = False # Set the resource to False initially lock = threading.Lock() # A lock for the shared resource def perform_computation(): # Thread A will call this function and manipulate the resource print(f'Thread {threading.currentThread().name} - performing some computation....') shared_resource = True print(f'Thread {threading.currentThread().name} - set shared_resource to True!') print(f'Thread {threading.currentThread().name} - Finished!') time.sleep(1) def monitor_resource(): # Thread B will monitor the shared resource while shared_resource == False: time.sleep(1) print(f'Daemon Thread {threading.currentThread().name} - Detected shared_resource = False') time.sleep(1) print(f'Daemon Thread {threading.currentThread().name} - Finished!') if __name__ == '__main__': a = threading.Thread(target=perform_computation, name='A') b = threading.Thread(target=monitor_resource, name='B', daemon=True) # Make thread B as a daemon thread # Now start both threads a.start() b.start() đầu ra ________số 8 Ở đây, lưu ý rằng chủ đề daemon không kết thúc. Điều này là do nó sẽ tự động bị giết bởi luồng chính daemon trong luồng là gì?Luồng Daemon trong Java là một luồng có mức độ ưu tiên thấp chạy trong nền để thực hiện các tác vụ như thu gom rác . Daemon thread trong Java cũng là một thread của nhà cung cấp dịch vụ cung cấp các dịch vụ cho user thread.
Quá trình daemon Python là gì?Daemon xử lý trong Python
. Các quy trình daemon hoặc các quy trình đang chạy trong nền tuân theo khái niệm tương tự như các luồng daemon . Để thực thi quy trình ở chế độ nền, chúng ta cần đặt cờ daemonic thành true.
Các chủ đề Python có phải là daemon theo mặc định không?Luồng chính là luồng mặc định được tạo trong quy trình Python. Theo mặc định, chuỗi này không phải là chuỗi daemon . Một quy trình Python sẽ thoát khi tất cả các luồng không phải daemon đã kết thúc.
chủ đề daemon với ví dụ là gì?Luồng daemon là luồng không ngăn JVM thoát khi chương trình kết thúc nhưng luồng vẫn đang chạy . Một ví dụ cho luồng daemon là bộ sưu tập rác. Bạn có thể sử dụng phương thức setDaemon(boolean) để thay đổi thuộc tính daemon của Thread trước khi thread bắt đầu. |