-
-
Notifications
You must be signed in to change notification settings - Fork 32.9k
Closed
Labels
3.11only security fixesonly security fixes3.12only security fixesonly security fixestopic-asynciotype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
import asyncio
import sys
import unittest
import asyncio
asyncio.set_child_watcher(asyncio.PidfdChildWatcher())
def create_free_port():
return 4 # chosen by a fair dice roll
class TestProc(unittest.IsolatedAsyncioTestCase):
async def asyncSetUp(self):
self.port = create_free_port()
self.proc = await asyncio.create_subprocess_exec(
sys.executable,
"-c", # more realistically this might be an http server or database
f"import time; print('listening on {self.port}'); import time; time.sleep(2); print('goodbye')",
)
async def testProc(self):
print(f"connecting to {self.port}")
async def asyncTearDown(self):
await self.proc.communicate() # hangs forever on 3.11
if __name__ == "__main__":
unittest.main()
on python3.10 this produces:
connecting to 4
listening on 4
goodbye
.
----------------------------------------------------------------------
Ran 1 test in 2.022s
OK
on python3.11 it hangs forever in await self.proc.communicate()
Originally posted by @graingert in #95736 (comment)
Metadata
Metadata
Assignees
Labels
3.11only security fixesonly security fixes3.12only security fixesonly security fixestopic-asynciotype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
Milestone
Relationships
Development
Select code repository
Activity
IsolatedAsyncioTestCase
does not callasyncio.set_event_loop
beforesetUp
anymore,asyncio.Runner
+PidFdChildWatcher
leaves zombie processes #95736graingert commentedon Aug 11, 2022
#94184 would fix this specific combination. I suspect any ChildWatcher that implements
attach_loop
would be broken[-]asyncio.Runner+PidFdChildWatcher leaves zombie processes[/-][+]asyncio.Runner+PidfdChildWatcher leaves zombie processes[/+]gvanrossum commentedon Aug 12, 2022
Why the nonsense with
self.port
? It does not contribute to understanding the repro but adds useless detail that the reader has to understand before being able to ignore.pythonGH-95899: fix asyncio.Runner to call set_event_loop only once (p…
GH-95899: fix asyncio.Runner to call set_event_loop only once (#95900)
GH-95899: fix asyncio.Runner to call set_event_loop only once (GH-95900…