
怎么说呢,比如php里会这样实现MVC
<?php $controller = $_GET['controller']; $controller_file = __DIR__."/controller/{$controller}.php"; if (!is_file($controller_file)) exit('404'); require_once $controller_file; $control = new $controller; $control->dispatch($_GET['action']); 像Python看到很多web源码都是一次性加载完所有的py脚本文件。像如下方式是不是不被推荐的?
import web exec "import %s" % web.get('controller') dir("controller_%s" % web.get("controller")) 1 lqs 2015 年 3 月 9 日 大多数 Python Web 框架的机制都是只需在应用启动时 import 一次即可,只有一次性开销,而不是像 PHP 那样每个请求来都要 include 一遍。 |
2 cevincheung OP |
3 lqs 2015 年 3 月 9 日 @cevincheung Python 如果作为 CGI 方式来运行也是一样,但现在通常使用 WSGI 方式:应用程序启动时加载好所有需要的库,每个请求过来只是调用函数来处理这个请求。 |
4 9hills 2015 年 3 月 9 日 via iPhone 现在php都是fastcgi了吧,每次都唤起太浪费资源。 |
5 typcn 2015 年 3 月 9 日 在持久运行的程序里每个请求都 import 一下,就类似于每次启动同一个软件都去重新下载一下 |
6 anewg 2015 年 3 月 9 日 @cevincheung 使用opcache可以避免 |
8 cevincheung OP @lqs 那如果一个请求执行的过程中根本用不到某个库,也加载进来那不是得不偿失了?如果刚好是一个大库 比如加载进来就一定会执行某些耗时或耗费CPU操作的,比如Redis。一加载就必须连接redis的(打个比方)。 |
10 lqs 2015 年 3 月 9 日 @cevincheung 这也总比在处理请求的时候再去干这些耗费CPU的操作要好。 |
11 est 2015 年 3 月 9 日 @cevincheung 用exec的确不推荐。直接 __import__("blah.blah") |
12 cute 2015 年 3 月 9 日 用__import__吧 |
13 JoeShu 2015 年 3 月 9 日 不被推荐的不是动态导入,而是exec的使用。python的动态加载module最好使用__import__,或者imp和importlib模块 |
14 nine 2015 年 3 月 9 日 |
15 RIcter 2015 年 3 月 9 日 import web exec "import %s" % web.get('controller') -> cOntroller= "; import os; os.system('rm -rf ../')" GG |
16 cevincheung OP @RIcter - -#只是打个比方而已- - |