It looks like the problem was the two calls to asyncio.run(...). If I wrap the entire process loop with a single asyncio.run(...) call and await for the calls to process_signal then everything works fine.
asyncio.run(...)
await
process_signal