How to terminate a thread in Python without loop in run method?
15,341
This code works fine but there is a need to explicitly flush data from standard output.
Haven't found a way where prints would work without flushing.
import time
from multiprocessing.process import Process
import sys
class LongAction:
def time_consuming_action(self):
tmax = 600
for i in range(tmax):
print i
time.sleep(1)
sys.stdout.flush()
time.sleep(tmax)
self.tmax = tmax
return "Slept well"
sys.stdout.flush()
class LongActionThread(Process):
def __init__(self, la_object):
self.la = la_object
Process.__init__(self)
def run(self):
self.la.time_consuming_action()
if __name__ == "__main__":
la = LongAction()
la_thread = LongActionThread(la)
la_thread.start()
# After 5 sec i've changed my mind and trying to kill LongActionThread
time.sleep(5)
print "Trying to kill LongActionThread"
la_thread.terminate()
Author by
ambi
Updated on June 04, 2022Comments
-
ambi almost 2 years
Having class which has a long method.
Creating a thread for that method.
How i can kill\terminate this thread?
Main problem is that i can't check for threading.Event in thread run() method because it doesn't contain loop.
Similar code as here:import time import threading class LongAction: def time_consuming_action(self): tmax = 600 for i in range(tmax): print i time.sleep(1) time.sleep(tmax) self.tmax = tmax return "Slept well" class LongActionThread(threading.Thread): def __init__(self, la_object): self.la = la_object threading.Thread.__init__(self) def run(self): self.la.time_consuming_action() la = LongAction() la_thread = LongActionThread(la) la_thread.start() # After 5 sec i've changed my mind and trying to kill LongActionThread time.sleep(5) print "Trying to kill LongActionThread" la_thread.kill()