我知道这是一个旧的线程,但这可能会对某些人有所帮助。要在特定目录中的任何文件被写入时终止进程,您可以使用类似以下内容的代码:
monitor.py
import os, sys, time, signal, threading, atexit
import inotify.adapters
def _monitor(path):
i = inotify.adapters.InotifyTree(path)
print "monitoring", path
while 1:
for event in i.event_gen():
if event is not None:
(header, type_names, watch_path, filename) = event
if 'IN_CLOSE_WRITE' in type_names:
prefix = 'monitor (pid=%d):' % os.getpid()
print "%s %s/%s changed," % (prefix, path, filename), 'restarting!'
os.kill(os.getpid(), signal.SIGKILL)
def start(path):
t = threading.Thread(target = _monitor, args = (path,))
t.setDaemon(True)
t.start()
print 'Started change monitor. (pid=%d)' % os.getpid()
在服务器启动时,请像这样调用它:
server.py
import monitor
monitor.start(<directory which contains your wsgi files>)
如果您的主服务器文件在包含所有文件的目录中,您可以按照以下方式进行:
monitor.start(os.path.dirname(__file__))
添加其他文件夹留给您自己完成...
您需要 'pip install inotify'
这段代码是从这里抄袭的: https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode.wiki#Restarting_Daemon_Processes
这是对我的重复问题的答案: WSGI process reload modules