perf: await pending frames without idle worker
This commit is contained in:
parent
1064e356de
commit
b937be8e30
2 changed files with 99 additions and 5 deletions
|
|
@ -11,6 +11,7 @@ newest frame.
|
|||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import asyncio
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
|
|
@ -391,6 +392,39 @@ class ClassificationBudgetTests(unittest.TestCase):
|
|||
session.close()
|
||||
self.assertTrue(session.closed)
|
||||
self.assertIsNone(session.take_pending(timeout=0.05))
|
||||
|
||||
def test_async_take_keeps_latest_and_wakes_on_close(self):
|
||||
"""The server waiter must not miss a frame that beat registration, and close must wake it."""
|
||||
session, engine, _, _ = make_session()
|
||||
|
||||
async def scenario():
|
||||
session.submit_frame(1, frame_bytes())
|
||||
session.submit_frame(2, frame_bytes())
|
||||
first = await asyncio.wait_for(session.take_pending_async(), timeout=1.0)
|
||||
self.assertEqual(first[0], 2)
|
||||
|
||||
waiting = asyncio.create_task(session.take_pending_async())
|
||||
await asyncio.sleep(0)
|
||||
self.assertFalse(waiting.done(), "an empty queue must not complete the waiter")
|
||||
session.reset()
|
||||
session.submit_frame(3, frame_bytes())
|
||||
self.assertEqual((await asyncio.wait_for(waiting, timeout=1.0))[0], 3)
|
||||
|
||||
cancelled = asyncio.create_task(session.take_pending_async())
|
||||
await asyncio.sleep(0)
|
||||
cancelled.cancel()
|
||||
with self.assertRaises(asyncio.CancelledError):
|
||||
await cancelled
|
||||
session.submit_frame(4, frame_bytes())
|
||||
self.assertEqual((await asyncio.wait_for(session.take_pending_async(), timeout=1.0))[0], 4)
|
||||
|
||||
closing = asyncio.create_task(session.take_pending_async())
|
||||
await asyncio.sleep(0)
|
||||
session.close()
|
||||
self.assertIsNone(await asyncio.wait_for(closing, timeout=1.0))
|
||||
self.assertFalse(session.submit_frame(5, frame_bytes()))
|
||||
|
||||
asyncio.run(scenario())
|
||||
engine.shutdown()
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue