django test 无法正常退出的问题


  • administrators

    在用django的时候如果你在程序里开了其他线程(比如用作后台的长期服务程序)。那么在用django自带的测试程序就会有问题。测试完成之后程序无法自动退出。这是由于开启的线程还在运行的原因。

    解决方法也比较简单。这是因为django的测试代码中用的是sys.exit()来退出。但是当python程序还有其他线程在执行的时候这个指令是没办法退出的。
    django/core/management/commands/test.py

    def handle(self, *test_labels, **options):
            from django.conf import settings
            from django.test.utils import get_runner
    
            TestRunner = get_runner(settings, options['testrunner'])
    
            test_runner = TestRunner(**options)
            failures = test_runner.run_tests(test_labels)
    
            if failures:
                sys.exit(1)
    

    改为

    def handle(self, *test_labels, **options):
            from django.conf import settings
            from django.test.utils import get_runner
    
            TestRunner = get_runner(settings, options['testrunner'])
    
            test_runner = TestRunner(**options)
            failures = test_runner.run_tests(test_labels)
    
            if failures:
                os._exit(1)
            os._exit(0)
    

    就是采用os._exit()进行退出。这样其他线程能够收到SIGINT的信号,然后回收资源退出就可以了。


登录后回复
 

与 蓝鲸技术论坛 的连接断开,我们正在尝试重连,请耐心等待