怎么说呢,比如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-03-09 12:29:05 +08:00 
                    
                    大多数 Python Web 框架的机制都是只需在应用启动时 import 一次即可,只有一次性开销,而不是像 PHP 那样每个请求来都要 include 一遍。 
                 | 
            
     2 
                    
                    cevincheung   OP  | 
            
     3 
                    
                    lqs      2015-03-09 12:46:00 +08:00 
                    
                    @cevincheung Python 如果作为 CGI 方式来运行也是一样,但现在通常使用 WSGI 方式:应用程序启动时加载好所有需要的库,每个请求过来只是调用函数来处理这个请求。 
                 | 
            
     4 
                    
                    9hills      2015-03-09 12:51:46 +08:00 via iPhone 
                    
                    现在php都是fastcgi了吧,每次都唤起太浪费资源。 
                 | 
            
     5 
                    
                    typcn      2015-03-09 12:58:31 +08:00 
                    
                    在持久运行的程序里每个请求都 import 一下,就类似于每次启动同一个软件都去重新下载一下 
                 | 
            
     6 
                    
                    anewg      2015-03-09 13:04:24 +08:00 
                    
                    @cevincheung 使用opcache可以避免 
                 | 
            
     8 
                    
                    cevincheung   OP @lqs 那如果一个请求执行的过程中根本用不到某个库,也加载进来那不是得不偿失了?如果刚好是一个大库 
                比如加载进来就一定会执行某些耗时或耗费CPU操作的,比如Redis。一加载就必须连接redis的(打个比方)。  | 
            
     10 
                    
                    lqs      2015-03-09 13:39:23 +08:00 
                    
                    @cevincheung 这也总比在处理请求的时候再去干这些耗费CPU的操作要好。 
                 | 
            
     11 
                    
                    est      2015-03-09 13:39:50 +08:00 
                    
                    @cevincheung 用exec的确不推荐。直接 __import__("blah.blah") 
                 | 
            
     12 
                    
                    cute      2015-03-09 13:44:28 +08:00 
                    
                    用__import__吧 
                 | 
            
     13 
                    
                    JoeShu      2015-03-09 14:00:37 +08:00 
                    
                    不被推荐的不是动态导入,而是exec的使用。python的动态加载module最好使用__import__,或者imp和importlib模块 
                 | 
            
     14 
                    
                    nine      2015-03-09 15:24:19 +08:00     | 
            
     15 
                    
                    RIcter      2015-03-09 16:02:58 +08:00 
                    
                    import web 
                exec "import %s" % web.get('controller') -> controller = "; import os; os.system('rm -rf ../')" GG  | 
            
     16 
                    
                    cevincheung   OP @RIcter - -#只是打个比方而已- - 
                 |