Quy trình xử lý tín hiệu trong python là gì? Tôi thiết lập một xử lý tín hiệu, khi tín hiệu xảy ra, làm thế nào để python gọi chức năng của tôi? Hệ điều hành có gọi nó giống như chương trình C không? Nếu tôi đang ở trong một mở rộng của python, nó bị gián đoạn ngay lập tức?python xử lý tín hiệu như thế nào?
Bây giờ, rõ ràng với tôi quá trình python xử lý tín hiệu như thế nào. Khi bạn thiết lập tín hiệu bằng mô-đun tín hiệu, mô-đun sẽ đăng ký chức năng signal_handler (xem $ src/Modules/signalmodule.c), đặt trình xử lý của bạn và gắn cờ là 1 (Handlers[sig_num].tripped = 1;
), sau đó gọi Py_AddPendingCall để thông báo cho trình thông dịch python. Trình thông dịch python sẽ gọi Py_MakePendingCalls để gọi PyErr_CheckSignals gọi hàm của bạn trong vòng lặp chính (xem $ src/Python/ceval.c). liên lạc với tôi nếu bạn muốn nói về điều này: [email protected]
Vì vậy, trình thông dịch trăn xử lý tín hiệu và gọi hàm của tôi. Tôi muốn biết điều này xảy ra như thế nào. Tôi đọc ignalmodule.c, funcs python được nối vào một mảng, và PyErr_CheckSignals gọi hàm được bắn. Tuy nhiên, PyErr_CheckSginals được gọi khi tín hiệu được gửi bởi hệ điều hành ở đâu? – renenglish
Nó không được gọi khi một tín hiệu được gửi bởi hệ điều hành. Nó được gọi rõ ràng ở những nơi khác nhau trong trình thông dịch khi bộ xử lý tín hiệu có thể chạy, chẳng hạn như khi in, đọc đầu vào của người dùng, vv Nó chạy hàng đợi xử lý ngắt. – Keith
Thx rất nhiều! Bây giờ nó rõ ràng với tôi như thế nào quá trình python xử lý một tín hiệu. Khi bạn thiết lập tín hiệu bằng mô-đun tín hiệu, mô-đun sẽ đăng ký chức năng signal_handler (xem $ src/Modules/signalmodule.c), thiết lập trình xử lý của bạn và gắn cờ nó là 1 (Trình xử lý [sig_num] .tripped = 1;), sau đó gọi Py_AddPendingCall để thông báo cho trình thông dịch python. Trình thông dịch python sẽ gọi Py_MakePendingCalls để gọi PyErr_CheckSignals gọi hàm của bạn trong vòng lặp thư (xem $ src/Python/ceval.c). – renenglish