重新加载mod_fcgid而无需杀死python服务
题
目前,我正在使用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()
当然,这并不是完美的(您可能必须弄乱线程),但是它应该使您对如何完全“重新加载”模块一个一般的了解。
不隶属于 StackOverflow