I’ve already asked similar question many times, but still can’t find appropriate solution.
I have and external function, that could run in some cases very long. I want to interrupt it after, say, 30 seconds.
How do I do that?
- Threads are good, but I can’t stope them (i don’t have access to external function’s code)
- Multiprocessing is also not an option, because I run site under mod_wsgi.
Are there any reliable ways to stop the thread? Maybe using os.system or os.kill. If yes, then how?
External function only performs some caclulations, no network connections or file openings. So, I just need to stop process and clean up.
My code (actually was taken from some source):
def time_limit(timeout): def internal(function): def internal2(*args, **kw): class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.result = None self.error = None def run(self): try: self.result = function(*args, **kw) # this is external except Exception as e: self.error = e def _stop(self): if self.isAlive(): threading.Thread._Thread__stop(self) c = MyThread() c.start() c.join(timeout) counter = 0 if c.isAlive(): c._stop() raise TimeoutException if c.error: raise c.error return c.result return internal2 return internal
Advertisement
Answer
You can’t kill thread, but you can kill a process. If you can use processes instead threads, you can use multithreading module. Process can be terminated from parent application.
If you describe your task in more detail, maybe I can help more.