W3docs

Is there any way to kill a Thread?

Yes, there are a few ways to kill a thread in Python.

Yes, Python does not provide a direct, safe way to forcefully kill a thread. Instead, the standard approach is cooperative cancellation, where the thread periodically checks a flag or event to decide when to stop.

Using threading.join() with a timeout The .join(timeout) method blocks the calling thread until the target thread finishes or the timeout expires. It does not forcibly terminate the thread.

import threading
import time

def my_function():
    print("Thread is running")
    time.sleep(10)
    print("Thread is done")

my_thread = threading.Thread(target=my_function)
my_thread.start()
my_thread.join(5)
print("Main thread waited 5 seconds. The target thread continues running.")

Daemon threads Setting a thread as a daemon with .setDaemon(True) means it will only be terminated automatically when the main program exits. It does not allow on-demand termination.

my_thread = threading.Thread(target=my_function)
my_thread.setDaemon(True)
my_thread.start()

Recommended: Cooperative cancellation with threading.Event The safest and most Pythonic way to stop a thread is to use a shared threading.Event that the thread checks periodically.

import threading
import time

def my_function(stop_event):
    while not stop_event.is_set():
        print("Thread is running")
        stop_event.wait(1)  # Waits up to 1 second, or until event is set
    print("Thread is stopped")

stop_event = threading.Event()
my_thread = threading.Thread(target=my_function, args=(stop_event,))
my_thread.start()

time.sleep(5)
stop_event.set()  # Signals the thread to stop
my_thread.join()
print("Thread is stopped")

Note that it is not recommended to use .stop() or ._stop() to stop a thread because it can cause issues with the interpreter's internal data structures.