2024-09-28 03:17:20 发布
网友
当我用Ctrl+C退出Djangomanage.py runserver时,运行HTTP请求的线程是正常完成还是中途中断?在
manage.py runserver
TL;当django dev服务器上的Ctrl+C时,运行的HTTP请求将停止
我觉得你的问题很有趣,而且经过调查:
我创建了一个需要10秒才能执行的视图,然后发送一个响应。 为了测试您的行为,我使用Ctrl+C停止开发服务器manage.py runserver,并检查结果。在
我的基础测试:
class TestView ( generic.View ): def get ( self, request ): import time time.sleep(10) response = HttpResponse('Done.') return response
Done.
到目前为止一切如期而至。但我稍微考虑了一下,因为python中的Ctrl+C不是句号,但实际上处理起来相当方便:只要Ctrl+C被击中,一个KeyboardInterruptaka就会出现一个异常(相当于此):
KeyboardInterrupt
因此,在基于命令行的程序中,可以放置以下内容:
try: some_action_that_takes_a_while() except KeyboardInterrupt: print('The user stopped the programm.')
移植到django后,新视图如下所示:
def get ( self, request ): import time slept_for = 0 try: for i in range( 100 ): slept_for += 0.1 time.sleep( 0.1 ) except KeyboardInterrupt: pass response = HttpResponse( 'Slept for: ' + str( slept_for ) + 's' ) return response
Slept for: 10s
所以这里的行为没有改变。我没有改变我的兴趣,但是我没有改变结果
slept_for = 1000*1000
而不是
time.sleep( 0.1 )
最后回答您的问题:在Ctrl+C时,dev服务器立即关闭,正在运行http reques的未完成。在
TL;当django dev服务器上的Ctrl+C时,运行的HTTP请求将停止
我觉得你的问题很有趣,而且经过调查:
我创建了一个需要10秒才能执行的视图,然后发送一个响应。 为了测试您的行为,我使用Ctrl+C停止开发服务器
manage.py runserver
,并检查结果。在我的基础测试:
Done.
到目前为止一切如期而至。但我稍微考虑了一下,因为python中的Ctrl+C不是句号,但实际上处理起来相当方便:只要Ctrl+C被击中,一个
^{pr2}$KeyboardInterrupt
aka就会出现一个异常(相当于此):因此,在基于命令行的程序中,可以放置以下内容:
移植到django后,新视图如下所示:
Slept for: 10s
所以这里的行为没有改变。我没有改变我的兴趣,但是我没有改变结果
而不是
最后回答您的问题:在Ctrl+C时,dev服务器立即关闭,正在运行http reques的未完成。在
相关问题 更多 >
编程相关推荐