KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have timeout context manager that works perfectly with signals but it raises error in multithread mode because signals work only in main thread. def timeout_handler(signum, frame): raise TimeoutException() @contextmanager def timeout(seconds): old_handler = signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(seconds) try: yield finally: signal.alarm(0) signal.signal(signal.SIGALRM, old_handler) I've seen decorator implementation of timeout but I don't know how to pass yield inside class derived from threading.Thread . My variant won't work. @contextmanager def timelimit(seconds): class FuncThread(threading.Thread): def run(self): yield it = FuncThread() it.start() it.join(seconds) if it.isAlive(): raise TimeoutException()
Tags (comma-separated)
Save Edits
Cancel