Cách threading.Thread
(và do đó threading.Timer
) hoạt động là mỗi thread đăng ký chính nó với các mô-đun threading
, và khi thoát phiên dịch các thông dịch viên sẽ đợi tất cả các chủ đề đã đăng ký thoát ra trước khi chấm dứt trình thông dịch thích hợp. Điều này được thực hiện để các chủ đề thực sự hoàn thành việc thực thi, thay vì yêu cầu trình thông dịch bị loại bỏ một cách dã man từ bên dưới chúng. Vì vậy, khi bạn nhấn^C, luồng chính sẽ nhận tín hiệu, quyết định chấm dứt và đợi cho đến khi bộ hẹn giờ kết thúc.
Bạn có thể đặt chủ đề ma quỉ (với phương pháp setDaemon
) để làm cho các mô-đun threading không chờ đợi cho các chủ đề, nhưng nếu chúng xảy ra để được thực thi mã Python trong khi thoát phiên dịch, bạn sẽ có được các lỗi khó hiểu trong thoát. Ngay cả khi bạn hủy bỏ threading.Timer
(và thiết lập nó daemonic) nó vẫn có thể thức dậy trong khi thông dịch viên đang bị phá hủy - bởi vì phương pháp 's cancel
chỉ cần nói threading.Timer
không thực hiện bất cứ điều gì khi nó thức dậy, nhưng nó phải thực sự thực thi Mã Python để thực hiện quyết định đó.
Không có cách nào duyên dáng để chấm dứt chuỗi (ngoại trừ chuỗi hiện tại) và không có cách đáng tin cậy nào để làm gián đoạn chuỗi bị chặn. Một cách tiếp cận dễ quản lý hơn đối với bộ tính giờ thường là vòng lặp sự kiện, giống như các GUI và các hệ thống hướng sự kiện khác cung cấp cho bạn. Những gì để sử dụng phụ thuộc hoàn toàn vào những gì khác chương trình của bạn sẽ hoạt động.
Nguồn
2011-07-06 09:50:20
bạn có thể dán mã vào đây không? – Rahul