当用户按下Ctrl-C时,SIGINT信号将发送到Python进程。从wsgi.py
文件中设置信号处理程序以捕获SIGINT并将其转发到程序。
wsgi.py:
...
import signal
signal.signal(signal.SIGINT, my_signal_handler)
您甚至可以将信号转发到Django信号:
my_django_shutdown_signal = django.dispatch.Signal()
def _forward_to_django_shutdown_signal(signal, frame):
my_django_shutdown_signal.send('system')
sys.exit(0) # So runserver does try to exit
signal.signal(signal.SIGINT, _forward_to_django_shutdown_signal)
由于signal
只能从主线程调用,因此不适用于runserver。使用该--noreload
选项调用runserver ,或切换到gunicorn。