trio
trio copied to clipboard
Embedded use vs. signal handler
If you install your own signal handler from C and then run an embedded Python interpreter, you can't use Trio:
Traceback (most recent call last):
File "/etc/kamailio/main.py", line 65, in background
trio.run(bg_main)
File "/usr/lib/python3/dist-packages/trio/_core/_run.py", line 1929, in run
runner = setup_runner(
File "/usr/lib/python3/dist-packages/trio/_core/_run.py", line 1846, in setup_runner
ki_manager.install(runner.deliver_ki, restrict_keyboard_interrupt_to_checkpoints)
File "/usr/lib/python3/dist-packages/trio/_core/_ki.py", line 180, in install
not is_main_thread()
File "/usr/lib/python3/dist-packages/trio/_util.py", line 79, in is_main_thread
signal.signal(signal.SIGINT, signal.getsignal(signal.SIGINT))
File "/usr/lib/python3.9/signal.py", line 56, in signal
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
TypeError: signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object