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。祝你好运