ITADN

Running Simulator inside asyncio eventloop and breaking out of `async for trigger: ...` causes runtime warning

#1647ClosedSazzach 创建于 2025-12-21
S
Sazzachcommented
I was writing a testcase in for a Glasgow applet, and my testbench emitted a bunch (~200) of warnings saying `Task was destroyed but it is pending!` I did some investigation, and came up with the following minimal example: ```python import asyncio from amaranth import * from amaranth.sim import Simulator def setup(): m = Module() foo = Signal() m.d.sync += foo.eq(1) async def tb(ctx): async for _ in ctx.tick(): break sim = Simulator(m) sim.add_clock(1e-6) sim.add_testbench(tb, background=False) sim.run() async def async_setup(): setup() # no warning when running setup directly #setup() asyncio.new_event_loop().run_until_complete(async_setup()) ``` Output: ``` samuelz@sz-t14 ~/D/g/async_for_test (main)> uv run --python 3.13 python -X tracemalloc asyncio_tb.py <sys>:0: RuntimeWarning: coroutine method 'aclose' of 'TickTrigger.__aiter__' was never awaited Object allocated at (most recent call last): File "/home/samuelz/Documents/glasgow_devel/async_for_test/asyncio_tb.py", lineno 13 async for _ in ctx.tick(): Task was destroyed but it is pending! task: <Task pending name='Task-2' coro=<<async_generator_athrow without __name__>()>> ``` If this isn't a issue with the simulator and running it within an asyncio event loop is unsupported I'd be happy to make a PR to Glasgow to fix it there.
关闭于 2026-01-14 2 条评论