Python/Flask: 关闭后应用仍在运行

3 投票
3 回答
5437 浏览
提问于 2025-04-18 10:40

我正在做一个简单的Flask网页应用,使用的是Eclipse/Pydev这个开发工具。在开发过程中,我需要频繁地重启这个应用,因为代码总是在变动。这就带来了一个问题:当我运行应用时,可以在本地看到它的界面,这很好。但是当我想关闭这个应用时,点击Eclipse里的红色方块(本来是用来停止应用的),有时候(其实是经常)旧版本的应用还是在运行,这样我就没法测试新版本了。在这种情况下,我只能去Windows任务管理器强制关闭所有相关进程。

你能给我一些建议,帮我解决这个问题吗?谢谢!

补充说明:很多时候,我需要运行这个应用两次,否则就无法连接。

3 个回答

1

其实在最新版本的PyDev中,这种情况是不应该发生的(也就是说,从PyDev 3.4.1开始:http://pydev.org/history_pydev.html,PyDev应该会结束所有主进程的子进程)。

所以,你能检查一下你使用的PyDev版本吗?

如果你使用的是最新版本的PyDev,可以按Ctrl+Shift+F9来结束或重新启动,默认情况下是这样。

不过因为你在使用flask,应该可以通过设置use_reloader=True来实现代码更改后自动重载,而不需要手动操作。

也就是说:我其实还没有测试过,但它的文档上说你可以为运行设置重载标志(use_reloader=True)——而且PyDev应该也能调试这个功能(我稍后会更仔细地查看,并改进PyDev在这方面的文档)。

1

我也遇到过类似的情况。我当时用的是CherryPy,而不是Flask,不过我的解决办法可能对你也有帮助。通常,浏览器会把网页保存在本地,这样每次访问网站时就不用重新下载。这种做法叫做缓存,虽然对普通用户来说很方便,但对开发应用的程序员来说却可能带来麻烦。如果你经常更新应用,浏览器可能会显示它之前保存的旧版本,而不是最新的版本。我建议每次重启应用时都清理一下缓存,或者干脆禁用缓存。

4

我也遇到过同样的问题,并且解决了它。我觉得这可能对你有帮助。

当我们在本地运行一个基于Flask的网站时,它会被分配一个TCP端口:5000,以及默认的IP地址:127.0.0.1:5000。

有时候,即使我们关闭程序或者终止代码,TCP连接仍然会保持打开状态。所以,我们需要结束这个TCP连接。你可以通过命令提示符(cmd)来做到这一点。

以下是两个步骤:
1. 查看正在运行的TCP连接的进程ID(PID)。
打开cmd,输入:

netstat -ano

这里输入图片描述

  1. 通过PID结束进程。这个命令是:taskkill /f /im [PID]。下面是一个示例。

    taskkill /f /im 7332

撰写回答