python web 脚本为什么不能热更新

2015-05-13 08:37:43 +08:00
 yakczh

java应用服务器启动以后,要把web项目下用的所有类文件都要加载到内存,修改了源代码,只能重启服务器,但是python应该是动态脚本,为什么修改了脚本以后要用 tornado.autoreload.start() 这样重启服务器

10772 次点击
所在节点    Python
30 条回复
kslr
2015-05-13 11:52:20 +08:00
自动加载有什么好的
ibigbug
2015-05-13 12:06:05 +08:00
为什么要能?
rcmerci
2015-05-13 12:09:49 +08:00
你代码里开个线程每隔5秒检查一下有没有文件改变。
改变了然后就重启。
这样就可以算热更新把
feilaoda
2015-05-13 12:09:50 +08:00
还曾想写个好用的支持热部署的web服务器,有了docker之后,就感觉热部署不再那么需要了。
loveyu
2015-05-13 12:25:10 +08:00
最近一直在想JAVA热更新问题,虽然目前没这个必要,但感觉要不中断现有链接且保证链接不中断好难。有想过使用两台服务器做来切换不知道是否可行。
caixiexin
2015-05-13 12:26:49 +08:00
刚学flask的时候我也发现了,也许惯性思维觉得解释型语言(php,js)都是要用再加载的?
FrankFang128
2015-05-13 12:37:00 +08:00
一般需要开启 debug 模式
raptor
2015-05-14 08:58:16 +08:00
@bydmm 那么当前连接在被重启服务器上的用户就会被强制断开
bydmm
2015-05-14 11:18:59 +08:00
@raptor
@loveyu
阿里就是通过分批次重启解决的, 首先让某些服务器停止接受新请求,剩余的请求最多30秒就断开了(超过30秒就超时了)然后这台服务器重启, 第一批重启完之后是第二批,第三批。
raptor
2015-05-15 08:55:56 +08:00
@bydmm 是啊,重点就在于让准备重启的服务器暂时停止接受新请求,并等待现有请求处理完成。
这事跟有没有多服务器没有关系,单个服务器也需要考虑这个问题,比如apache的graceful,nginx的kill -HUP。python的web server也可以,比如gunicorn就可以

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/190647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX