簡體   English   中英

線程結束時如何終止主程序? 仍在等待進程在 python 中分離?

[英]How to terminate main program when thread ends? Still getting waiting for process to detach in python?

我有一個定義如下的主程序:

主程序

def main():

try:
    registry.start_server()
except:
    print("Shutting down the program")
    pass


if __name__ == '__main__':
    main()

registry.start_server() 是另一個模塊中的方法,如下所示:

def start_server():
    t_server = threading.Thread(target=server.start)
    t_server.start()
    try:
        t_server.join()
    except KeyboardInterrupt:
        print("Error")
        raise ValueError

finally:
    fp.close()

server.start 是另一個模塊中的方法,它以while(True)的方式進行一些監聽工作。 我不確定在 PyCharm 中單擊“停止”時如何停止整個程序,即 Ctrl + C(信號)。 我嘗試使用 Event 但沒有成功。 當信號被捕獲時,我通過引發異常來進入 main.py,但這並沒有終止整個程序。 它顯示Waiting for program to detach 唯一的方法是使用 SIGKILL。 我不明白程序一直掛在哪里? 我還嘗試在信號被捕獲時調用 sys.exit(0) 並將線程創建為 Deamon,但這也無濟於事。

在另一個模塊中編輯While True 方法

def start(self, event):

 try:
        while True:
            if event.is_set():
                if self.pubsub.channels:
                    print("It enters here")
                    message = self.pubsub.get_message(True)
                    if message:
                          . 
                          .
                          .
           else:
                return

要解決這個問題,您需要做的就是:

  1. 讓子線程退出,並且
  2. 讓主線程加入子線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM