[issue27972] Confusing error during cyclic yield

2016-09-06 Thread Max von Tettenborn

New submission from Max von Tettenborn:

Below code reproduces the problem. The resulting error is a RecursionError and 
it is very hard to trace that to the cause of the problem, which is the runner 
task and the stop task yielding from each other, forming a deadlock.

I think, an easy to make mistake like that should raise a clearer exception. 
And maybe I am mistaken, but it should in principle be possible for the event 
loop to detect a cyclic yield, right?


import asyncio


class A:
@asyncio.coroutine
def start(self):
self.runner_task = asyncio.ensure_future(self.runner())

@asyncio.coroutine
def stop(self):
self.runner_task.cancel()
yield from self.runner_task

@asyncio.coroutine
def runner(self):
try:
while True:
yield from asyncio.sleep(5)
except asyncio.CancelledError:
yield from self.stop()
return


def do_test():
@asyncio.coroutine
def f():
a = A()
yield from a.start()
yield from asyncio.sleep(1)
yield from a.stop()

asyncio.get_event_loop().run_until_complete(f())

--
components: asyncio
messages: 274547
nosy: Max von Tettenborn, gvanrossum, haypo, yselivanov
priority: normal
severity: normal
status: open
title: Confusing error during cyclic yield
type: behavior
versions: Python 3.5

___
Python tracker 
<http://bugs.python.org/issue27972>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27972] Confusing error during cyclic yield

2016-10-10 Thread Max von Tettenborn

Max von Tettenborn added the comment:

You are very welcome, glad I could help.

--

___
Python tracker 
<http://bugs.python.org/issue27972>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com