On 2012-10-29, at 1:05 AM, Greg Ewing
Yury Selivanov wrote:
def coro1(): try: with timeout(1.0): yield from coro2() # 1 finally: try: with timeout(1.0): yield from coro2() # 2 except TimeoutError: pass def coro2(): try: block() yield # 3 action() finally: block() yield # 4 another_action() Now, if "coro2" is suspended at #4 -- it shouldn't be interrupted with TimeoutError. If, however, "coro2" is at #3 -- it can be, and it doesn't matter was it called from #1 or #2.
What is your reasoning behind asserting this? Because it's inside a try block of its own? Because it's subject to a nested timeout? Something else?
Because scheduler, when it is deciding to interrupt a coroutine or not, should only question whether that particular coroutine is in its finally, and not the one which called it. - Yury