10
votes

I've been looking all over the place for a good timeout script that can kill a thread if it's been active for more than X seconds, but all the examples I've seen have flaws that don't always stop the thread. Using thread.join(x) ends up defeating the purpose of it being a thread.

The only decent example I've found is Timeout on a function call and that one's not without its flaws..

Anyone know of a better way to do this?

2
The Python folks made this hard on purpose because usually it's a bad idea to kill something that might be writing to shared memory. Could you use a process instead of a thread? - Dave
Well, in this case it's for a mod_wsgi script, so it's more of a termination thing. Once the script runs over the time limit, just kill the whole thread and exit, so potentially damaging shared memory isn't such a big problem. - Ian
Are you running in daemon mode or embedded mode? - Dave
it is a pain that there is no easy way to kill a thread, the thread could be a hanged up HTTP connection, due to DNS lookup etc. - Asiel Diaz Benitez

2 Answers

2
votes

See my answer to python: how to send packets in multi thread and then the thread kill itself - there is a fragment with InterruptableThread class and example that kill another thread after timeout - exactly what you want.

There is also similar Python recipe at activestate.

0
votes

I know this might not be what you want, but have you considered the signal approach? Timeout on a function call http://docs.python.org/library/signal.html#example

You can set an alarm signal at the beginning of the thread execution, and then stop the thread in the signal handler.