2010-09-30 31 views
5

Tôi đang cố gắng để giết một sợi trong python. Một ngoại lệ sẽ là cách ưu tiên để làm điều đó, như là một lối thoát duyên dáng của phương thức chạy của luồng thông qua một lần thử: ngoại trừ: cặp sẽ cho phép đóng tài nguyên.Python giết thread

Tôi đã thử: Is there any way to kill a Thread in Python?, nhưng xác định điều đó không hoạt động trong khi mã đang thực hiện cuộc gọi hệ thống (như time.sleep). Có cách nào để nâng cao một ngoại lệ trong một thread (hoặc quá trình, trong không nhớ,) mà làm việc không có mater những gì thread được thực hiện?

+0

bản sao có thể có của [Có cách nào để giết một Chủ đề bằng Python không?] (Http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in- python) – Mark

Trả lời

4

Nói chung, việc tăng ngoại lệ không đồng bộ rất khó xử lý đúng cách. Điều này là do, thay vì có một điểm cụ thể của mã nơi ngoại lệ có thể được tạo - và do đó, việc xử lý ngoại lệ cần được kiểm tra - thay vào đó, ngoại lệ có thể được tạo sau bất kỳ hướng dẫn bytecode nào. Điều này làm cho nó khó thực hiện hơn và kiểm tra hoàn toàn việc xử lý ngoại lệ.

Điều đó nói rằng, nó có thể được thực hiện - nhưng, hiện tại, không an toàn trong Python. Việc đưa ra một ngoại lệ không đồng bộ trong Python là nguy hiểm, bởi vì bạn có thể nâng nó lên trong một trình xử lý ngoại lệ, điều này sẽ làm tăng một ngoại lệ khác và ngăn không cho việc dọn dẹp diễn ra đúng cách. Xem câu trả lời của tôi tại How to limit execution time of a function call in Python.

Có thể báo hiệu một số hình thức của giấc ngủ để hủy, nhưng không có cơ sở hạ tầng chung cho điều này trong Python. Bạn đang tốt hơn nhiều hoặc tránh sự cần thiết phải giết một sợi, hoặc di chuyển các sợi đến một quá trình , nơi bạn có thể gửi một tín hiệu cho toàn bộ quá trình và thoát khỏi sạch.

Các vấn đề liên quan