objectif
Relier SIGINT/SIGTERM à des callbacks non bloquants (Unix).
code minimal
import asyncio, signal, os
if os.name == "posix":
async def main():
loop = asyncio.get_running_loop()
fired = {"n":0}
loop.add_signal_handler(signal.SIGINT, lambda: fired.__setitem__("n", fired["n"]+1))
# on simule l'appel direct du callback (pas d'envoi réel de signal ici)
for _ in range(2): loop.call_soon(loop._signal_handlers.get(signal.SIGINT))
print(fired["n"] == 2) # attendu: True
asyncio.run(main())
else:
print(True)
utilisation
import os
print(os.name in ("posix","nt"))
variante(s) utile(s)
import asyncio
async def f(): return 1
print(asyncio.run(f()) == 1)
notes
- add_signal_handler indisponible sur Windows.
- Utilisez Event/Flag pour coordonner l’arrêt avec vos tâches.