Python 使用线程模块时,Django在完成测试后不会退出

Python 使用线程模块时,Django在完成测试后不会退出,python,django,bash,python-multithreading,django-testing,Python,Django,Bash,Python Multithreading,Django Testing,我正在使用django.test.SimpleTestCase进行集成测试 运行python manage.py test后,测试成功运行,终端挂起并显示以下消息: --------------------------- Ran 5 tests in 1.365s OK 问题是,目前我使用CTRL+C返回终端,但我希望在CI/CD管道中进行自动测试 我执行测试的方式有没有做错什么?还是这种行为正常?在这种情况下,Bash中有没有一种方法可以通过编程执行然后退出测试 编辑: 在深入分析我的应用

我正在使用
django.test.SimpleTestCase
进行集成测试
运行
python manage.py test
后,测试成功运行,终端挂起并显示以下消息:

---------------------------
Ran 5 tests in 1.365s

OK
问题是,目前我使用CTRL+C返回终端,但我希望在CI/CD管道中进行自动测试

我执行测试的方式有没有做错什么?还是这种行为正常?在这种情况下,Bash中有没有一种方法可以通过编程执行然后退出测试

编辑:
在深入分析我的应用程序之后,我能够确定是什么导致了这种行为。我在
视图中使用
线程
的方式如下所示。py

def __pooling():
  wait_time = 10
  call_remote_server()
  threading.Timer(wait_time, __pooling).start()

__pooling()
def __pooling():
  wait_time = 10
  call_remote_server()
  threading.Timer(wait_time, __pooling).start()

__pooling()
基本上,我需要我的应用程序不时异步地做一些事情。 我应该改变我做池的方式吗?或者我应该在测试期间禁用它(如何禁用?)

我能够确定是什么导致了这种行为。我在
视图中使用
线程
的方式如下所示。py

def __pooling():
  wait_time = 10
  call_remote_server()
  threading.Timer(wait_time, __pooling).start()

__pooling()
def __pooling():
  wait_time = 10
  call_remote_server()
  threading.Timer(wait_time, __pooling).start()

__pooling()
基本上,我需要我的应用程序不时地做一些事情 异步的。我应该改变我做池的方式吗

我不完全理解您的需求,但更传统的方法是在Django之外安排任务(可能是a)。像或之类的操作系统级调度器、类似的东西或类似的任务队列都是合理的选择

或者我应该在测试期间禁用它(如何禁用?)

我不建议继续使用
\uu pooling()
函数,因为它现在已经存在。在我看来,这种东西不属于您的
视图.py
。但是如果你想保留它,比如

from django.conf import settings

if not settings.DEBUG:
  __pooling()

也许会有帮助。您的
\u pooling()
函数只有在
DEBUG
错误时才会被调用,因为它应该在生产中使用。(如果在您的CI环境中也是错误的,您可以选择其他现有设置,或者向
settings.py
中添加一些专门用于控制此设置的内容。)

测试完成后,您应该自动返回您的终端。除了
python manage.py测试
,您还做了什么?你使用的是什么操作系统?您是在使用Docker还是某种VM?是的,我只是在做
python manage.py测试
。在ubuntu 18.0.4虚拟机中运行。也使用virtualenv。在按下Ctrl+C键之前,您要等待多长时间?您是在使用常规的默认bashshell还是其他什么东西?听起来确实很奇怪。请尝试运行甚至
-v3
以增加详细性。希望输出中有一些有趣的东西。你能在测试中附加一个调试器吗?你的IDE可能可以做到这一点,或者类似的。非常感谢你,克里斯!我将看看调度器和任务队列。调试也是一个很好的解决方法。很乐意帮忙,@VictorVal。祝你好运