Перезагрузить Mod_FCGGID без убийства службы Python
Вопрос
В настоящее время я запускаю проект Django на веб-сервере My School с FCGI. Я выполнял несколько руководств, которые рекомендуют установить виртуальную локальную среду Python, и она отлично отработала. Единственным вопросом, в котором у меня было то, что «прикосновение» мой FCGI-файл для перезагрузки исходных файлов было недостаточно, но вместо этого мне пришлось убить сервис Python через SSH. Это потому, что mod_fcgid используется.
Тем не менее, админ не думал, что это была отличная идея, что я побежал в моем местном питоне. Он подумал, что он лучше, если бы я только что сказал ему, какие модули устанавливают на root, который был очень хорошим сервисом.
Но делаю это, я больше не могу убивать Python, так как он находится под рулом (хотя аморал, как я, я определенно пытался). Рекомендация администраторов заключалась в том, что я должен также попробовать, сделайте скрипт FCGI перезагружать собой, проверяя метку времени. Я пытался найти документацию о том, как это сделать, но фонд очень мало и так как я абсолютный новичок, я понятия не имею, что будет работать. У кого-нибудь есть опыт работы Python / Django под Mod_FCGID или советы, где можно найти связанные гиды / документацию?
Решение
Вот что я бы сделал:
## 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()
Предоставлено, это не входит в совершеннее (вам может придеться беспорядок с резьбой), но оно должно дать вам общее представление о том, как «перезагрузить» модуль полностью.