Nathaniel Smith <n...@pobox.com> added the comment:

Thanks for the summary, Yury! One quick note:

> Effectively, the previously merged origin-tracking API (the one with which we 
> replaced set_coroutine_wrapper) achieves the same goal.

I would say the two features are complementary. This feature (unawaited 
tracking) is cheap (a few % slowdown on microbenchmarks), and lets you find all 
the unawaited coroutine objects created in a given span of code. 
Origin-tracking is expensive (~3x slowdown on microbenchmarks with asyncio's 
default settings), and lets you take a coroutine object and map it back to the 
exact line of code where it was created. If you have both, then you can find 
all the coroutine objects and then find their exact origins.

In the testing use case, there are two problems with relying on the GC to issue 
warnings: (1) because of traceback frame capture, reference cycles, etc., 
currently "coroutine was never awaited" warnings often (usually?) get 
attributed to the wrong test. (And yeah, it's even worse on pypy.) (2) because 
it's just a warning, it's easy to miss entirely -- if you forget an 'await' you 
can easily get a test that passes because it never actually executed any code 
(!), and when the tests are green most people don't read the CI logs to check 
for warnings.

The idea of this feature is it's cheap enough for pytest-asyncio or trio to 
turn it on by default, and it makes the detection deterministic, so e.g. 
pytest-asyncio can reliably figure out which test caused the problem and mark 
it as FAILed. Then if it you also turn on origin-tracking, it can further 
narrow that down to the exact line in the test that caused the failure.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue30491>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to