I have a long process that I've scheduled to run in a thread, because otherwise it will freeze the UI in my wxpython application.
I'm using:
threading.Thread(target=myLongProcess).start()
to start the thread and it works, but I don't know how to pause and resume the thread. I looked in the Python docs for the above methods, but wasn't able to find them.
Could anyone suggest how I could do this?
Methods Used: sleep(time): This is a method used to sleep the thread for some milliseconds time. suspend(): This is a method used to suspend the thread. The thread will remain suspended and won't perform its tasks until it is resumed. resume(): This is a method used to resume the suspended thread.
You can suspend the calling thread for a given time in Python using the sleep method from the time module. It accepts the number of seconds for which you want to put the calling thread on suspension for.
Sleep method can be used to pause a thread for a fixed period of time. Here's a simple example and its output. In the above example, The main thread creates a new thread th which is pause by sleep method for 500 milliseconds. The main thread is also pause by sleep method for 1000 milliseconds.
I did some speed tests as well, the time to set the flag and for action to be taken is pleasantly fast 0.00002 secs on a slow 2 processor Linux box.
Example of thread pause test using set()
and clear()
events:
import threading import time # This function gets called by our thread.. so it basically becomes the thread init... def wait_for_event(e): while True: print('\tTHREAD: This is the thread speaking, we are Waiting for event to start..') event_is_set = e.wait() print('\tTHREAD: WHOOOOOO HOOOO WE GOT A SIGNAL : %s' % event_is_set) # or for Python >= 3.6 # print(f'\tTHREAD: WHOOOOOO HOOOO WE GOT A SIGNAL : {event_is_set}') e.clear() # Main code e = threading.Event() t = threading.Thread(name='pausable_thread', target=wait_for_event, args=(e,)) t.start() while True: print('MAIN LOOP: still in the main loop..') time.sleep(4) print('MAIN LOOP: I just set the flag..') e.set() print('MAIN LOOP: now Im gonna do some processing') time.sleep(4) print('MAIN LOOP: .. some more processing im doing yeahhhh') time.sleep(4) print('MAIN LOOP: ok ready, soon we will repeat the loop..') time.sleep(2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With