[issue46844] Context-based TaskGroup for legacy libraries

2022-02-24 Thread Joongi Kim
Joongi Kim added the comment: I have added more about my stories in bpo-46843. I think the suggestion of implicit taskgroup binding with the current asyncio.TaskGroup has no point but it would have more meaning with PersistentTaskGroup. So, if we treat PersistentTaskGroup as a "nested, hier

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-24 Thread Guido van Rossum
Guido van Rossum added the comment: -1. Libraries that manage their own tasks should continue to do so, until they are ready to adopt TaskGroup. Trying to "own" (and wait for) tasks created by a library sounds like a recipe for disaster if the library wasn't expecting that. Do you have a spe

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-24 Thread Joongi Kim
Joongi Kim added the comment: Ok, let me be clear: Patching asyncio.create_task() to support this opt-in contextual task group binding is not an ultimate goal of this issue. If it becomes possible to override/extend the task factory at runtime with any event loop implementation, then it's o

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-24 Thread Andrew Svetlov
Andrew Svetlov added the comment: I personally don't think that the described opt-in trick should be a part of asyncio. A third-party library that patches asyncio.create_task() can be a useful thing though during the transition period. We even cannot deprecate asyncio.create_task() right now:

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Joongi Kim
Joongi Kim added the comment: Ah, and this use case also requires that TaskGroup should have an option like `return_exceptions=True` which makes it not to cancel sibling tasks upon unhandled exceptions, as I suggested in PersistentTaskGroup (bpo-46843). -- __

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Joongi Kim
Joongi Kim added the comment: An example would be like: tg = asyncio.TaskGroup() ... async with tg: with asyncio.TaskGroupBinder(tg): # just a hypothetical API asyncio.create_task(...) # equivalent to tg.create_task(...) await some_library.some_work() # all tasks are bound

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Joongi Kim
Joongi Kim added the comment: My propsal is to opt-in the taskgroup binding for asyncio.create_task() under a specific context, not changing the defautl behavior. -- ___ Python tracker _

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Andrew Svetlov
Andrew Svetlov added the comment: -1 Now bare `create_task()` does fire-and-forget action. After the proposed change it will fail loudly. Even if this behavior is better it is not backward compatible. People start blaming and asking "how to return everything back?" -- ___

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Joongi Kim
Joongi Kim added the comment: It is also useful to write debugging/monitoring codes for asyncio applications. For instance, we could "group" tasks from different libraries and count them. -- ___ Python tracker

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Joongi Kim
Joongi Kim added the comment: Conceptually it is similar to replace malloc using LD_PRELOAD or LD_LIBRARY_PATH manipulation. When I cannot modify the executable/library binaries, this allows replacing the functionality of specific functions. If we could assign a specific (persistent) task g

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Joongi Kim
Joongi Kim added the comment: The main benefit is that any legacy code that I cannot modify can be upgraded to TaskGroup-based codes, which offers a better machinary for exception handling and propagation. There may be different ways to visit this issue: allow replacing the task factory in

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Yury Selivanov
Yury Selivanov added the comment: > I believe that this approach would allow more control over tasks implicitly > spawned by 3rd-party libraries that cannot control. Please elaborate. I'm not sure what are the benefits of this. -- ___ Python track

[issue46844] Context-based TaskGroup for legacy libraries

2022-02-23 Thread Joongi Kim
New submission from Joongi Kim : Along with bpo-46843 and the new asyncio.TaskGroup API, I would like to suggest addition of context-based TaskGroup feature. Currently asyncio.create_task() just creates a new task directly attached to the event loop, while asyncio.TaskGroup.create_task() crea