GH-74116: Allow multiple drain waiters for asyncio.StreamWriter (GH-94705)

This commit is contained in:
Kumar Aditya 2022-08-30 00:01:11 +05:30 committed by GitHub
parent 3d180e3ab2
commit e5b2453e61
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 19 deletions

View file

@ -864,6 +864,25 @@ os.close(fd)
self.assertEqual(cm.filename, __file__)
self.assertIs(protocol._loop, self.loop)
def test_multiple_drain(self):
# See https://github.com/python/cpython/issues/74116
drained = 0
async def drainer(stream):
nonlocal drained
await stream._drain_helper()
drained += 1
async def main():
loop = asyncio.get_running_loop()
stream = asyncio.streams.FlowControlMixin(loop)
stream.pause_writing()
loop.call_later(0.1, stream.resume_writing)
await asyncio.gather(*[drainer(stream) for _ in range(10)])
self.assertEqual(drained, 10)
self.loop.run_until_complete(main())
def test_drain_raises(self):
# See http://bugs.python.org/issue25441