目前,我正在使用FCGI在学校的网络服务器上运行Django项目。我确实遵循了建议安装虚拟本地Python环境的多个指南,并且效果很好。我唯一的问题是,“触摸”我的FCGI文件重新加载源文件还不够,但是我不得不通过SSH杀死Python服务。这是因为使用mod_fcgid。

但是,管理员认为我经营自己的本地Python并不是一个好主意。他认为如果我只是告诉他要在Root上安装的模块,这确实是一项非常不错的服务。

但是这样做,我再也不能杀死python了,因为它是根深蒂固的(尽管我是不道德的,但我肯定已经尝试过)。管理员的建议是,我也应该尝试通过检查时间戳记将FCGI脚本重新加载。我试图找到有关如何执行此操作的文档,但是很少资金,因为我是一个绝对的初学者,所以我不知道有什么用。任何人都有在MOD_FCGID下运行Python/Django的经验,还是有关在哪里找到相关指南/文档的提示?

有帮助吗?

解决方案

这是我要做的:

## top of my .fcgi script
import sys, time
original_modules = sys.modules.copy()

## in a separate thread
old_ctime = os.path.getctime("mymodule.py")
while True:
    time.sleep(10)
    new_ctime = os.path.getctime("mymodule.py")
    if new_ctime > old_ctime:
        sys.modules = original_modules # reset all imports
        import mymodule
        mymodule.dofcgi()

当然,这并不是完美的(您可能必须弄乱线程),但是它应该使您对如何完全“重新加载”模块一个一般的了解。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top