Python có thể sử dụng chủ đề không?
Tôi đang làm một dự án với python và trong mã của tôi, tôi phải bắt đầu một số chủ đề. Bây giờ tôi cần gọi một luồng để ngăn chặn nó, nhưng từ một lớp khác. Có cách nào để lấy danh sách tất cả các luồng đang chạy không? Nội dung chính Hiển thị Cảm ơn vì sự giúp đỡ đã hỏi ngày 21 tháng 6 năm 2016 lúc 9. 24 1 Bạn có thể sử dụng luồng. liệt kê(). Tài liệu Python về nó ở đây
Anders 2.23210 huy hiệu bạc19 huy hiệu đồng đã trả lời 21 tháng 6 năm 2016 lúc 10. 32 kaiser kaiser 8088 huy hiệu bạc11 huy hiệu đồng 2 xâu chuỗi. enumerate() có thể được sử dụng để lấy danh sách các luồng đang chạy (Đối tượng luồng). Theo tham chiếu thư viện, các luồng đang chạy ngụ ý
Nó loại trừ các Chủ đề chưa bắt đầu và đã kết thúc Bạn có thể sử dụng luồng. active_count để lấy độ dài của danh sách được trả về theo luồng. liệt kê đã trả lời 9 tháng 4 năm 2019 lúc 7. 23 Nấm nho Nấm nho 3965 huy hiệu bạc12 huy hiệu đồng Không phải là câu trả lời bạn đang tìm kiếm? . 7 hoặc đặt câu hỏi của riêng bạnNói chung, việc tắt các luồng đột ngột được coi là một cách lập trình tồi. Tắt một luồng đột ngột có thể để lại một tài nguyên quan trọng phải được đóng đúng cách, mở. Nhưng bạn có thể muốn hủy một luồng sau khi một khoảng thời gian cụ thể đã trôi qua hoặc một số ngắt đã được tạo. Có nhiều phương pháp khác nhau để bạn có thể giết một luồng trong python.
Tăng ngoại lệ trong chuỗi python. Python3
________ 14 ________ 16 ________ 100 ________ 101 ________ 10
Khi chúng tôi chạy mã ở trên trong máy và bạn sẽ nhận thấy, ngay khi hàm raise_Exception() được gọi, hàm đích run() kết thúc. Điều này là do ngay khi một ngoại lệ được đưa ra, điều khiển chương trình sẽ nhảy ra khỏi khối thử và chức năng run() bị chấm dứt. Sau đó, hàm join() có thể được gọi để hủy luồng. Trong trường hợp không có hàm run_Exception() thì hàm đích run() cứ chạy mãi và hàm join() không bao giờ được gọi để kết thúc luồng Đặt/Đặt lại cờ dừng. Python3
Trong đoạn mã trên, ngay khi biến toàn cục stop_threads được đặt, hàm đích run() kết thúc và luồng t1 có thể bị hủy bằng cách sử dụng t1. tham gia(). Nhưng người ta có thể không sử dụng biến toàn cục vì một số lý do nhất định. Đối với những tình huống đó, các đối tượng chức năng có thể được chuyển để cung cấp chức năng tương tự như bên dưới. Python3
Đối tượng hàm được truyền trong đoạn mã trên luôn trả về giá trị của biến cục bộ stop_threads. Giá trị này được kiểm tra trong hàm run() và ngay khi stop_threads được đặt lại, hàm run() kết thúc và luồng có thể bị hủy Sử dụng dấu vết để hủy chuỗi. Python3
________ 105 ________ 64 ________ 12 ________ 108
________ 105 ________ 64 ________ 114
Trong mã này, start() được sửa đổi một chút để đặt chức năng theo dõi hệ thống bằng cách sử dụng settrace(). Chức năng theo dõi cục bộ được xác định sao cho, bất cứ khi nào cờ tiêu diệt (đã tắt) của chuỗi tương ứng được đặt, một ngoại lệ SystemExit sẽ được đưa ra khi thực thi dòng mã tiếp theo, kết thúc quá trình thực thi hàm đích func. Bây giờ chủ đề có thể bị giết bằng tham gia () Sử dụng mô-đun đa xử lý để loại bỏ luồng. Python3
Chức năng của đoạn mã trên cũng có thể được triển khai bằng cách sử dụng mô-đun đa xử lý theo cách tương tự, với rất ít thay đổi. Xem mã được đưa ra dưới đây. Python3
Mặc dù giao diện của hai mô-đun tương tự nhau nhưng hai mô-đun có cách triển khai rất khác nhau. Tất cả các luồng chia sẻ các biến toàn cục, trong khi các quy trình hoàn toàn tách biệt với nhau. Do đó, quá trình tiêu diệt an toàn hơn nhiều so với tiêu diệt luồng. Lớp Process được cung cấp một phương thức, term(), để hủy một tiến trình. Bây giờ, trở lại vấn đề ban đầu. Giả sử trong đoạn mã trên, chúng tôi muốn hủy tất cả các quy trình sau 0. 03s đã trôi qua. Chức năng này đạt được bằng cách sử dụng mô-đun đa xử lý trong đoạn mã sau. Python3
________ 68 ________ 475 ________ 71 ________ 148
Mặc dù hai mô-đun có cách triển khai khác nhau. Chức năng này được cung cấp bởi mô-đun đa xử lý trong đoạn mã trên tương tự như tiêu diệt luồng. Do đó, mô-đun đa xử lý có thể được sử dụng như một giải pháp thay thế đơn giản bất cứ khi nào chúng ta được yêu cầu thực hiện việc tiêu diệt các luồng trong Python Tắt luồng Python bằng cách đặt nó làm daemon. Python3
Lưu ý rằng, luồng t1 vẫn tồn tại và ngăn chương trình chính thoát qua sys. lối ra(). Trong Python, bất kỳ luồng không phải trình nền nào còn sống đều chặn chương trình chính để thoát. Trong khi đó, các luồng trình nền sẽ bị hủy ngay khi thoát khỏi chương trình chính. Nói cách khác, ngay sau khi thoát khỏi chương trình chính, tất cả các luồng daemon sẽ bị hủy. Để khai báo một luồng là daemon, chúng ta đặt đối số từ khóa, daemon là True. Ví dụ trong mã đã cho, nó thể hiện thuộc tính của chủ đề daemon. Python3
Lưu ý rằng, ngay sau khi thoát khỏi chương trình chính, luồng t1 sẽ bị hủy. Phương pháp này tỏ ra cực kỳ hữu ích trong trường hợp có thể sử dụng kết thúc chương trình để kích hoạt việc tiêu diệt luồng. Lưu ý rằng trong Python, chương trình chính kết thúc ngay khi tất cả các luồng không phải trình nền đã chết, bất kể số lượng luồng trình nền còn sống. Do đó, các tài nguyên được nắm giữ bởi các luồng daemon này, chẳng hạn như tệp đang mở, giao dịch cơ sở dữ liệu, v.v. có thể không được phát hành đúng cách. Luồng điều khiển ban đầu trong chương trình python không phải là luồng daemon. Việc giết một luồng bằng vũ lực không được khuyến nghị trừ khi nó được biết chắc chắn rằng làm như vậy sẽ không gây ra bất kỳ rò rỉ hoặc bế tắc nào. Python3
|