Các Python cho signal
nói:
• Mặc dù bộ xử lý tín hiệu Python được gọi là không đồng bộ theo như người dùng Python có liên quan, họ chỉ có thể xảy ra giữa e "nguyên tử" hướng dẫn của trình thông dịch Python. Điều này có nghĩa là các tín hiệu đến trong các tính toán dài được thực hiện hoàn toàn trong C (chẳng hạn như đối sánh cụm từ thông dụng trên các phần lớn văn bản) có thể bị trì hoãn trong một lượng thời gian tùy ý.
trong khi time
nói:
Thời gian đình chỉ thực tế có thể ít hơn so với yêu cầu bởi vì bất kỳ tín hiệu bắt sẽ chấm dứt giấc ngủ() sau đây thực hiện các thói quen đánh bắt mà tín hiệu của.
Trên Windows, rõ ràng time.sleep()
không được triển khai theo tài liệu, vì trình xử lý tín hiệu nhận được trong khi ngủ không được thực hiện cho đến khi hết thời gian của giấc ngủ. Ví dụ sau đây:
import signal, time
def handler(signum, frame):
print('Signal handler called with signal', signum)
signal.signal(signal.SIGINT, handler)
print("signal set, sleeping")
time.sleep(10)
print("sleep done")
in:
signal set, sleeping
Signal handler called with signal 2
sleep done
với dòng đầu tiên xảy ra ngay lập tức và hai sau 10 giây giây, bất kể khi ngắt xảy ra.
Như Thomas K đề xuất, một chiến lược tốt hơn là sử dụng đề tài và đồng bộ hóa.
Bạn có thể viết mã của mình để mã đang chờ trên 'luồng .Event', với thời gian chờ là 60 và nhấn sự kiện đó từ chuỗi khác nếu bạn muốn hủy chờ? –
đầu tiên đọc câu phân tích dấu chấm câu cổ điển. Muốn có một cách để dừng thời gian bằng cách ngủ ở đâu đó. – Simon
Nó không phải là mã của tôi. Đó là mã khách hàng không rõ ràng mà tôi đang cố gắng dừng lại sau khi hết thời gian chờ. Có vẻ như trong cpython không có cơ chế thực sự tốt tồn tại .. và vâng chúng tôi cũng đã cố gắng đề và subprocess là một không đi. – mkorpela