1. 程式人生 > >強行停止python子執行緒最佳方案

強行停止python子執行緒最佳方案

子執行緒的強制性終止是我們實際應用時經常需要用到的,然而python官方並沒有給出相關的函式來處理這種情況。網上找到一個挺合理的解決方案,這裡分享給大家。

import threading
import time
import inspect
import ctypes
 
 
def _async_raise(tid, exctype):
    """raises the exception, performs cleanup if needed"""
    tid = ctypes.c_long(tid)
    if not inspect.isclass(exctype):
        exctype =
type(exctype) res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype)) if res == 0: raise ValueError("invalid thread id") elif res != 1: # """if it returns a number greater than one, you're in trouble, # and you should call it again with exc=NULL to revert the effect"""
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None) raise SystemError("PyThreadState_SetAsyncExc failed") def stop_thread(thread): _async_raise(thread.ident, SystemExit) def test(): while True: print('-------') time.sleep(0.5) if __name__ == "__main__"
: t = threading.Thread(target=test) t.start() time.sleep(5.2) print("main thread sleep finish") stop_thread(t)