Forma de controlar execuções com thread em Python.

Exemplo:

import threading
import time
 
def waiter(event, duration):
    print("Waiting for the event to be set...")
    event_waited = event.wait(duration)
    if event_waited:
        print("Done waiting, event was set!")
    else:
        print("Done waiting, timed out!")
 
def setter(event, delay):
    time.sleep(delay)
    print("Setting the event.")
    event.set()
 
# Create an Event object
event = threading.Event()
 
# Create two threads: one for waiting and one for setting the event
wait_thread = threading.Thread(target=waiter, args=(event, 10))
set_thread = threading.Thread(target=setter, args=(event, 3))
 
# Start both threads
wait_thread.start()
set_thread.start()
 
# Join both threads to the main thread
wait_thread.join()
set_thread.join()