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