I looked online and found some SO discussing and ActiveState recipes for running some code with a timeout. It looks there are some common approaches:
- Use thread that run the code, and
join
it with timeout. If timeout elapsed - kill the thread. This is not directly supported in Python (used private _Thread__stop
function) so it is bad practice
- Use
signal.SIGALRM
- but this approach not working on Windows!
- Use subprocess with timeout - but this is too heavy - what if I want to start interruptible task often, I don't want fire process for each!
So, what is the right way? I'm not asking about workarounds (eg use Twisted and async IO), but actual way to solve actual problem - I have some function and I want to run it only with some timeout. If timeout elapsed, I want control back. And I want it to work on Linux and Windows.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…