Перехват исключения CancelledError
при ожидании отмененной задачи делает вещи go гладкими.
Так что я думаю, что бегун теста задерживается в действии.
import asyncio
import unittest
class TestCancellation(unittest.IsolatedAsyncioTestCase):
async def test_works(self):
task = asyncio.create_task(asyncio.sleep(5))
await asyncio.sleep(2)
task.cancel()
try:
await task
except asyncio.CancelledError:
print("Task Cancelled already")
if __name__ == '__main__':
unittest.main()
производит
unittest-hang $ python3.8 test.py
Task Cancelled already
.
----------------------------------------------------------------------
Ran 1 test in 2.009s
OK
Я игнорирую, нужно ли вам ждать отмененную задачу или нет.
Если вы должны, поскольку вы, похоже, полностью проверяете его отмену, то поймайте исключение.
Если нет, то просто избегайте этого, так как создание задачи запускает ее немедленно и не нужно ждать снова
import asyncio
import unittest
class TestCancellation(unittest.IsolatedAsyncioTestCase):
async def test_works(self):
task = asyncio.create_task(asyncio.sleep(5))
await asyncio.sleep(2)
task.cancel()
# await task
if __name__ == '__main__':
unittest.main()
производит
unittest-hang $ python3.8 test.py
.
----------------------------------------------------------------------
Ran 1 test in 2.009s
OK