我想在我的Django项目中为python记录器添加一个过滤器;过滤器中有一个while循环(等待并允许用户提供响应)。但是,当我尝试实现我的过滤器时,服务器似乎立即中断并且我的视图进入无限循环(当我在终端窗口中测试过滤器时不会发生这种情况)。
我的代码我看起来像这样:
import logging, time, os
# in my Utils.py file:
def ErrorReport(msg, notify=False, warnOnly=False):
logger.exception("ErrorReport:%s" % msg, exc_info=True)
raise RuntimeError('Aborting execution. Terrible things might happen. Check logs for more information')
# in my views.py file:
class ErrorFilter(logging.Filter):
def __init__(self,level):
self.level = level
print level
def filter(self,record):
if record.levelno == self.level:
os.environ["ERROR_FLAG"] = "True"
timeout = time.time() + 60*1 #set the timeout to 1 minute
while True:
print "waiting..."
keep_going = os.environ.get("CONTINUE_FLAG")
#wait for user to respond
if keep_going == "False" or time.time() > timeout:
Utils.ErrorReport("There's a problem, quiting current process.")
if keep_going == "True":
break
logger = Utils.getLogger() #I format the logger in another python script called Utils
logger.addFilter(ErrorFilter(logging.ERROR))
def home(request):
context_dict = {'boldmessage': "--> To view logs, please turn off any popup blockers <--",'version':"1.1.6"}
logger.error("faking an error to test new filter")
return render(request, 'InterfaceApp/home.html', context_dict)
我已经在终端窗口中测试了这个过滤器的更简单版本,并且没有任何问题,它陷入无限循环。当我尝试打开我的django网站的主页时,看起来它正在永远加载,当我查看开发人员窗口时,我可以看到我丢失了与服务器的连接。在我正在运行服务器的终端窗口中,我永远得到了打印语句waiting...
,即使我已经在while循环上设置并测试了超时。
在django项目中运行while
循环是否存在根本问题,或者我错过了什么?