2012-08-13 40 views
5

Tôi có một GUI Python mà tôi sử dụng để kiểm tra các khía cạnh khác nhau của công việc của mình. Hiện tại tôi có một nút "stop" để giết chết quá trình ở cuối mỗi bài kiểm tra (có thể có nhiều bài kiểm tra được thiết lập để chạy cùng một lúc). Tuy nhiên, một số xét nghiệm mất nhiều thời gian để chạy và nếu tôi cần ngừng kiểm tra, tôi muốn nó ngừng ngay lập tức. Suy nghĩ của tôi là sử dụngLàm cách nào để dừng quá trình Python ngay lập tức khỏi cửa sổ Tkinter?

import pdb; pdb.set_trace() 
exit 

Nhưng tôi không chắc chắn cách tôi sẽ đưa mã này vào dòng mã tiếp theo. Điều này có thể không?

+0

bạn đang cố gắng để ngăn chặn một quá trình trăn hay một sợi python? –

+0

là một chuỗi riêng biệt. –

Trả lời

5

Nếu đó là một chuỗi, bạn có thể sử dụng mô-đun thread (hoặc _thread trong Python 3) cấp thấp hơn để loại bỏ chuỗi bằng ngoại lệ bằng cách gọi thread.exit().

Từ documentation:

  • thread.exit(): Nâng SystemExit ngoại lệ. Khi không bị bắt, điều này sẽ khiến luồng thoát âm thầm.

Một phương pháp sạch hơn (tùy thuộc vào cách xử lý của bạn được thiết lập) sẽ được tín hiệu thread để ngăn chặn xử lý và thoát sử dụng một biến Ví dụ, sau đó gọi phương thức join() từ chủ đề chính của bạn phải chờ cho đến khi thoát khỏi chuỗi.

Ví dụ:

class MyThread(threading.Thread): 

    def __init__(self): 
     super(MyThread, self).__init__() 
     self._stop_req = False 

    def run(self): 
     while not self._stop_req: 
      pass 
      # processing 

     # clean up before exiting 

    def stop(self): 
     # triggers the threading event 
     self._stop_req = True; 

def main(): 
    # set up the processing thread 
    processing_thread = MyThread() 
    processing_thread.start() 

    # do other things 

    # stop the thread and wait for it to exit 
    processing_thread.stop() 
    processing_thread.join() 

if __name__ == "__main__": 
    main() 
+0

Đây KHÔNG phải là một ví dụ tốt về mục đích của luồng.Event. Lớp đó là để giao tiếp giữa các luồng bằng cách sử dụng phương thức chờ, thường không thoát khỏi tín hiệu. Trong trường hợp này, một biến cá thể đơn giản sẽ hoạt động tốt. – Genome

+0

@Genome: Đã cập nhật câu trả lời cho phù hợp – pR0Ps

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