我是 Django 的新手,我想我犯了个小错误.
我用Pydev启动了dev服务器:
点击项目〉〉Django〉〉自定义命令〉〉runserver
服务器启动了,一切都很好。但现在我试图停止它,但不知道如何停止。我在PyDev控制台中停止了该进程,并关闭了Eclipse,但网页仍在从**http://127.0.0.1:8000**提供服务。
我从命令行正常启动并退出服务器:
python manage.py runserver
但服务器还在运行我哪里做错了
我是 Django 的新手,我想我犯了个小错误.
我用Pydev启动了dev服务器:
点击项目〉〉Django〉〉自定义命令〉〉runserver
服务器启动了,一切都很好。但现在我试图停止它,但不知道如何停止。我在PyDev控制台中停止了该进程,并关闭了Eclipse,但网页仍在从**http://127.0.0.1:8000**提供服务。
我从命令行正常启动并退出服务器:
python manage.py runserver
但服务器还在运行我哪里做错了
8条答案
按热度按时间x759pob21#
默认情况下,runserver命令在autoroload模式下运行,它在一个单独的进程中运行,这意味着PyDev不知道如何停止它,也不会在控制台窗口中显示它的输出。
如果你运行命令
runserver --noreload
,自动重载器将被禁用。然后你可以看到控制台的输出并正常停止服务器。然而,这意味着对Python文件的更改将在你手动重启服务器后生效。ut6juiuv2#
运行项目1.右键单击项目(不是子文件夹)2.运行方式〉Pydev:Django
终止1.在控制台窗口中单击终止
服务器已关闭
r55awzrz3#
我通常从控制台运行它。从PyDev运行会增加不必要的混乱,并且不会带来任何好处,除非你碰巧使用PyDev的GUI交互调试。
mwecs4sa4#
编辑:最新的PyDev版本(从PyDev 3.4.1开始)不再需要任何解决方法:
也就是说:PyDev会正确地在kill进程操作上杀死子进程,并且在调试时,即使打开了常规重载,PyDev也会将调试器连接到子进程。
旧答案(适用于3.4.1之前的PyDev版本):
不幸的是,这是预料之中的,因为PyDev将简单地终止父进程(即:就好像不是ctrl+C而是在任务管理器中终止父进程一样)。
解决方案是编辑Django本身,让子进程轮询父进程,以了解它是否还活着,如果不是就退出...参见:How to make child process die after parent exits?作为参考。
快速浏览之后,它似乎与django/utils/autoreload.py和它启动的方式有关--因此,需要启动一个线程,不断查看父进程是否还活着,如果不是,它会杀死子进程--我已经报告了Django本身的一个bug:https://code.djangoproject.com/ticket/16982
注意:作为PyDev的一个解决方案,你可以让Django在从PyDev运行的同时分配一个新的控制台(在PyDev之外)(因此,在Django找到合适的解决方案之前,下面的补丁可以用来让Django自动加载分配一个新的控制台--在那里你可以正确地使用Ctrl+C)。
o4tp2gmn5#
解决方案:在某个项目文件中创建一个解释器错误。这将导致服务器崩溃。然后服务器可以正常重启。
2skhul336#
如果您在Windows上使用CMD:使用CTRL+BREAK退出服务器。
ijnw1ujt7#
您可以通过单击
Ctrl
+Pause
键退出。请注意,暂停键可能被称为Break
,在某些笔记本电脑中,它是使用组合Fn
+F12
组成的。希望这可能会有所帮助。7gcisfzg8#
运行sudo lsof -i:8000
然后运行kill-9 #PID应该可以终止运行该服务器的进程。然后您可以manage.py再次在该端口上运行python www.example.com服务器