23 lines
557 B
Python
23 lines
557 B
Python
import asyncio
|
|
import signal
|
|
from functools import wraps
|
|
|
|
|
|
def coro(f):
|
|
@wraps(f)
|
|
def wrapper(*args, **kwargs):
|
|
loop = asyncio.get_event_loop()
|
|
|
|
def cancel_task_callback():
|
|
for task in asyncio.all_tasks():
|
|
task.cancel()
|
|
|
|
for sig in (signal.SIGINT, signal.SIGTERM):
|
|
loop.add_signal_handler(sig, cancel_task_callback)
|
|
try:
|
|
loop.run_until_complete(f(*args, **kwargs))
|
|
finally:
|
|
loop.run_until_complete(loop.shutdown_asyncgens())
|
|
|
|
return wrapper
|