"manage.py runserver and Ctrl+C (Django)" "manage.py运行服务器以及Ctrl+C(Django)"

2024-09-28 03:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

当我用Ctrl+C退出Djangomanage.py runserver时,运行HTTP请求的线程是正常完成还是中途中断?在


Tags: pyhttp线程ctrlrunserverdjangomanage
1条回答
网友
1楼 · 发布于 2024-09-28 03:17:20

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
  • 正常执行(10s运行时):显示消息Done.
  • 中断执行(Ctrl+C在请求运行时):浏览器错误,无法访问主机

到目前为止一切如期而至。但我稍微考虑了一下,因为python中的Ctrl+C不是句号,但实际上处理起来相当方便:只要Ctrl+C被击中,一个KeyboardInterruptaka就会出现一个异常(相当于此):

^{pr2}$

因此,在基于命令行的程序中,可以放置以下内容:

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
  • 正常执行(10s运行时):显示消息Slept for: 10s
  • 中断执行(Ctrl+C在请求运行时):浏览器错误,无法访问主机

所以这里的行为没有改变。我没有改变我的兴趣,但是我没有改变结果

slept_for = 1000*1000

而不是

time.sleep( 0.1 )

最后回答您的问题:在Ctrl+C时,dev服务器立即关闭,正在运行http reques未完成。在

相关问题 更多 >

    热门问题