Python 強制停止子執行緒

2021-10-07 21:20:13 字數 1189 閱讀 4953

timer 一般會設定乙個間隔時間,然後才開乙個子執行緒執行需要執行的函式。

cancel() 函式只能取消還未開始執行的 timer,也就是取消該 timer。如果 timer 已經開啟子執行緒執行函式了,用 cancel() 函式 是不能停止子執行緒執行的,子執行緒會一直執行,直到結束。

cancel():# stop the timer』s action if it』s still waiting

使用下面這個函式強制停止子執行緒:

import ctypes

import datetime

import inspect

defstop_thread

(thread)

: tid = thread.ident

exctype = systemexit

"""raises the exception, performs cleanup if needed"""

tid = ctypes.c_long(tid)

ifnot 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"

)

待解決問題:雖然強制停止了,但是print(str(threading.enumerate()))仍能看到剛剛強制停止的子執行緒,這是為什麼呢?

python 強制停止執行緒

2020 12 13更新 ctypes終止執行緒 coding utf 8 import threading import time import ctypes import inspect import asyncio def async raise tid,exctype raises the ...

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

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

外部執行緒停止Java子執行緒的方法

一 thread.stop 官方不推薦,because it is inherently unsafe.二 方式一 1.執行緒類示例 public class threadt1 implements runnable public void stop public void run system.o...