Hướng dẫn python interrupt main thread - python làm gián đoạn chuỗi chính
Bạn có thể làm gián đoạn chủ đề chính thông qua hàm _Thread.Interrupt_main ().interrupt the main thread via the _thread.interrupt_main() function. Show Trong hướng dẫn này, bạn sẽ khám phá cách làm gián đoạn chủ đề chính từ một chủ đề khác trong Python.interrupt the main thread from another thread in Python. Bắt đầu nào.
Một chủ đề là một chủ đề thực thi trong một chương trình máy tính.thread of execution in a computer program. Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản. Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời. Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô -đun luồng và lớp luồng.threading.Thread class. Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:
Trong lập trình đồng thời, chúng ta có thể cần phải làm gián đoạn luồng chính từ một luồng khác. Điều này có thể là vì nhiều lý do, chẳng hạn như:
Làm thế nào chúng ta có thể làm gián đoạn chủ đề chính từ một chủ đề khác? Cách làm gián đoạn chủ đề chínhNgắt chủ đề chính và xử lý với ngoại lệ_thread.interrupt_main() function.
Đọc thêmsignal.SIGINT (interruption signal) that will be sent to the main thread. This is the signal sent when the user presses Ctrl-C on the command prompt. Takeaways
Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời._thread.interrupt_main() function.
Takeaways
Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời. Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô -đun luồng và lớp luồng. Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:KeyboardInterrupt exception. Takeaways
Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản.signal.SIGINT. Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời.signal.signal() function and specifying the signal number to handle and the function to handle it. Takeaways
Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô -đun luồng và lớp luồng. Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:
Đọc thêm Takeaways
Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô -đun luồng và lớp luồng.
Chủ đề trong Python: Hướng dẫn hoàn chỉnh Trong lập trình đồng thời, chúng ta có thể cần phải làm gián đoạn luồng chính từ một luồng khác. Ngắt chủ đề chính và xử lý với ngoại lệĐiều này có thể là vì nhiều lý do, chẳng hạn như: Một thay đổi lớn cho chương trình hoặc hệ thống bên ngoài. Một yêu cầu từ người dùng hoặc hệ thống khác. Một tài nguyên không còn hợp lệ hoặc có sẵn.time.sleep() function for three seconds. It will then report a message that it is interrupting the main thread, then calls the _thread.interrupt_main() function. Hàm nhiệm vụ () bên dưới thực hiện điều này.
Tiếp theo, trong luồng chính, chúng tôi sẽ tạo một phiên bản mới. Chủ đề và định cấu hình nó để thực thi hàm Task (). Chủ đề sau đó có thể được bắt đầu bằng cách gọi hàm start ().threading.Thread instance and configure it to execute the task() function. The thread can then be started by calling the start() function.
Sau đó, chúng ta có thể chấp nhận tín hiệu SIGINT vì bị gián đoạn và sử dụng mẫu thử nghiệm thử để bắt một bàn phím tăng lên.KeyboardInterrupt. Trong phần thân của Try-Except sẽ chặn mãi mãi để mô phỏng công việc, in một tin nhắn và ngủ trong nửa giây mỗi lần lặp. Bàn phím được xử lý bằng cách in tin nhắn và chấm dứt luồng bằng một cuộc gọi đến hàm sys.exit ().KeyboardInterrupt is handled by printing a message and terminating the thread with a call to the sys.exit() function.
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ngoại trừ bàn phím interrupt: & nbsp; & nbsp; & nbsp; & nbsp;# chấm dứt chủ đề chính & nbsp; & nbsp; & nbsp; & nbsp; in ('bị gián đoạn chính! thoát.')KeyboardInterrupt Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây. # SuperfastPython.com
từ _thread nhập ngắt_main nhập khẩu sys Chạy ví dụ đầu tiên tạo và bắt đầu luồng mới. Chủ đề chính sau đó các vòng lặp, chặn trong nửa giây một lần và báo cáo một tin nhắn mỗi lần lặp. Chủ đề mới bắt đầu, chặn trong ba giây. Sau đó, nó gửi một sigint đến luồng chính và chấm dứt. Chủ đề chính nhận được tín hiệu Sigint làm tăng bàn phímBàn phím được xử lý bằng cách báo cáo một tin nhắn và thoát khỏi luồng chính, lần lượt chấm dứt chương trình. Điều này cho thấy làm thế nào một luồng mới có thể làm gián đoạn luồng chính và cách chủ đề chính có thể mong đợi và xử lý sự gián đoạn với mẫu thử nghiệm thử. Chủ đề chính đang chờ ... Làm gián đoạn chủ đề chính ngay bây giờ Chính bị gián đoạn! Thoát ra. Tiếp theo, hãy để Lôi nhìn vào cách chủ đề chính có thể xử lý sự gián đoạn bằng cách sử dụng trình xử lý tín hiệu.handle_sigint() function below implements this.
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;signal.signal() function.
Và đó là nó. Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây.
Chạy ví dụ đầu tiên tạo và bắt đầu luồng mới. Chủ đề chính sau đó các vòng lặp, chặn trong nửa giây một lần và báo cáo một tin nhắn mỗi lần lặp. Chủ đề mới bắt đầu, chặn trong ba giây. Sau đó, nó gửi một sigint đến luồng chính và chấm dứt. Chủ đề chính nhận được tín hiệu sigint được xử lý bởi chức năng xử lý tín hiệu tùy chỉnh của chúng tôi. Hàm trả lời bằng cách báo cáo một tin nhắn và thoát khỏi luồng chính, lần lượt chấm dứt chương trình. Điều này cho thấy làm thế nào một luồng mới có thể làm gián đoạn luồng chính và cách luồng chính có thể mong đợi và xử lý sự gián đoạn với trình xử lý tín hiệu đã đăng ký.
Tiếp theo, hãy để Lôi nhìn vào một ví dụ trong đó sự gián đoạn vào luồng chính bị trì hoãn. Ví dụ về sự gián đoạn bị trì hoãn của chủ đề chínhChúng ta có thể khám phá làm thế nào một sự gián đoạn của luồng chính có thể bị trì hoãn. Điều này có thể xảy ra nếu luồng chính bị chặn, chẳng hạn như trong một cuộc gọi để ngủ, bằng cách thực hiện một cuộc gọi IO chặn hoặc bằng cách chờ đợi một nguyên thủy đồng thời. Trong ví dụ này, chúng tôi sẽ có khối luồng chính trong một thời gian dài bằng cách gọi hàm ngủ. Chủ đề chính sẽ bị gián đoạn ở giữa giấc ngủ này, nhưng sẽ không phản hồi cho đến khi cuộc gọi chặn kết thúc. Điều này có thể đạt được bằng cách cập nhật ví dụ đầu tiên ở trên xử lý sự gián đoạn bằng cách sử dụng khối Excet Try-Except. Chúng ta có thể cập nhật luồng chính để thay vì lặp lại mãi mãi và ngủ trong một phần nhỏ, thay vào đó, không có vòng lặp và một cuộc gọi nào đến hàm thời gian.slege () trong bảy giây.time.sleep() function for seven seconds.
# Nhiệm vụ được thực thi trong một luồng mới Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây.
Chạy ví dụ đầu tiên tạo và bắt đầu luồng mới. Chủ đề chính sau đó các vòng lặp, chặn trong nửa giây một lần và báo cáo một tin nhắn mỗi lần lặp. Chủ đề mới bắt đầu, chặn trong ba giây. Sau đó, nó gửi một sigint đến luồng chính và chấm dứt. Chủ đề chính nhận được tín hiệu sigint được xử lý bởi chức năng xử lý tín hiệu tùy chỉnh của chúng tôi. Hàm trả lời bằng cách báo cáo một tin nhắn và thoát khỏi luồng chính, lần lượt chấm dứt chương trình.sleep() function returns. Điều này cho thấy làm thế nào một luồng mới có thể làm gián đoạn luồng chính và cách luồng chính có thể mong đợi và xử lý sự gián đoạn với trình xử lý tín hiệu đã đăng ký.KeyboardInterrupt The KeyboardInterrupt is handled by reporting a message and exiting the main thread, which in turn terminates the program. Điều này cho thấy làm thế nào một luồng mới có thể làm gián đoạn luồng chính và cách luồng chính sẽ không phản hồi ngay lập tức nếu nó bị chiếm bởi một cuộc gọi chức năng chặn.
Đọc thêmPhần này cung cấp các tài nguyên bổ sung mà bạn có thể thấy hữu ích. API
Hướng dẫn
Sách
TakeawaysBây giờ bạn đã biết làm thế nào để làm gián đoạn chủ đề chính trong Python. Bạn có câu hỏi nào không? Đặt câu hỏi của bạn trong các ý kiến dưới đây và tôi sẽ cố gắng hết sức để trả lời. Ảnh của Kirk Thornton trên unplash |