Python 停止Django';是否通过页面请求访问开发服务器?
我正在考虑编写一个轻便的Python应用程序。作为我最熟悉的“图形用户界面工具包”——————————是HTML/CSS/JS,我想使用Django作为项目的框架,使用其内置的“开发服务器”(Python 停止Django';是否通过页面请求访问开发服务器?,python,django,Python,Django,我正在考虑编写一个轻便的Python应用程序。作为我最熟悉的“图形用户界面工具包”——————————是HTML/CSS/JS,我想使用Django作为项目的框架,使用其内置的“开发服务器”(manage.py runserver) 我已经花了几个小时进行概念验证,到目前为止,我遇到的唯一真正的问题是在用户使用完应用程序后关闭服务器。理想情况下,我希望在应用程序的页面上有一个链接,关闭服务器并关闭页面,但我在Django文档中没有看到任何东西表明这是可能的 这能做到吗?就这点而言,这是编写小型可
manage.py runserver
)
我已经花了几个小时进行概念验证,到目前为止,我遇到的唯一真正的问题是在用户使用完应用程序后关闭服务器。理想情况下,我希望在应用程序的页面上有一个链接,关闭服务器并关闭页面,但我在Django文档中没有看到任何东西表明这是可能的
这能做到吗?就这点而言,这是编写小型可移植GUI工具的合理方法吗?一种暴力方法是让流程自行终止,如:
# somewhere in a views.py
def shutdown(request):
import os
os.kill(os.getpid(), 9)
注意:仅在Unix上可用(Windows替代方案可能是这样:)请查看
python manage.py runserver的源代码:
当您点击Ctrl+C
时,它所做的只是调用sys.exit(0)
,因此您可能也可以这样做
编辑:根据您的评论,Django在调用视图函数时似乎正在捕获SystemExit
。您是否尝试在另一个线程中调用sys.exit
import threading
thread = threading.Thread(target=sys.exit, args=(0,))
thread.start()
Edit:Nevermind,sys.exit from other thread只终止该线程,这在Python文档中没有很好的说明=(它在Windows上对我有效:
def shutdown(request):
import os
os._exit(0)
不幸的是,我还需要支持Windows用户。:-)嘿,这可能行得通。我将把这个问题留一点时间,看看我是否能找到一种比“当面开枪”更微妙、更适合Django的方法,但它似乎确实能完成任务。;-。。。9? 你不认为应该调用atexit
处理程序吗?是的,应该。但默认情况下,django中没有注册的atexit
处理程序。我遗漏了什么?这是我的第一个想法,但Django捕获了SystemExit
异常并将其作为页面返回!:-D