From cbed5de0158d90cc04362de853a2135e61295a42 Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Wed, 26 May 2021 10:28:56 -0700 Subject: [PATCH] Use django.core.signals.request_finished to exit asynchronously after serving the response. --- tests/test_data/django1/app.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/tests/test_data/django1/app.py b/tests/test_data/django1/app.py index d4c1e569..ba8b35a8 100644 --- a/tests/test_data/django1/app.py +++ b/tests/test_data/django1/app.py @@ -3,25 +3,24 @@ import debuggee debuggee.setup() import os -import signal import sys from django.conf import settings from django.core.management import execute_from_command_line +from django.core.signals import request_finished +from django.dispatch import receiver from django.http import HttpResponse from django.template import loader -def sigint_handler(signal, frame): - import django.dispatch +exiting = False - djshutdown = django.dispatch.Signal() - djshutdown.send("system") - sys.exit(0) +@receiver(request_finished) +def on_request_finished(sender, **kwargs): + if exiting: + os._exit(0) -signal.signal(signal.SIGINT, sigint_handler) - settings.configure( MIDDLEWARE=[], DEBUG=True, @@ -76,10 +75,8 @@ def bad_template(request): def exit_app(request): - if hasattr(signal, "SIGBREAK"): - os.kill(os.getpid(), signal.SIGBREAK) - else: - os.kill(os.getpid(), signal.SIGTERM) + global exiting + exiting = True return HttpResponse("Done")