满口金牙 2022-12-15 17:07 采纳率: 91.5%
浏览 49
已结题

django 自检卡住的原因请教!

python manage.py runserver

System check identified no issues (0 silenced).
December 15, 2022 - 17:03:30
Django version 4.1.3, using settings 'general_server.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CTRL-BREAK.  // 成功运行

我随便改 一点代码,自检就卡死了,也没报错
D:\mySite\general_server\easyoffice\views.py changed, reloading.
Watching for file changes with StatReloader
Performing system checks...
  • 写回答

3条回答 默认 最新

  • yy64ll826 2022-12-15 19:21
    关注

    望采纳
    1、在命令启动的时候把命令对应的进程ID号,以及超时时间,写到一个临时文件中
    2、写一个定时服务不停的扫描文件中的进程ID,超时时间,如果发现超时,则杀死
    3、这个办法,后面发现对于我的业务是不可行的,原因是命令启动,假死,压根就
    没有执行任何代码,没有把PID和超时时间写到临时文件中
    4、对于其他在不是在启动的时候假死的情况,是可以用的

    # -*- coding: utf-8 -*-
    import os
    import time
    import sys
    import datetime
    import traceback
    import tempfile
    import logging
     
    COMMAND_PID_ROOT_PATH = os.path.join(tempfile.gettempdir(),"command_pids")
     
    def get_log(file_name):
        LOG_DIR = "/var/log/mylog/" #日志目录
     
        if os.name != "posix":
            LOG_DIR =  os.path.split(os.path.abspath(os.path.dirname(__file__)))[0]
     
        if not os.path.exists(LOG_DIR):
            os.mkdir(LOG_DIR)
            
        path = os.path.join(LOG_DIR,file_name)
        logger = logging.getLogger()
        hdlr = logging.FileHandler(path)
        formatter = logging.Formatter('%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s')
        hdlr.setFormatter(formatter)
        logger.addHandler(hdlr)
        logger.setLevel(logging.NOTSET)
        return logger
     
    logger = get_log("monitor_cmds.log")
     
    def monitor():
        logger.info("****staring monitor commands*****")
        expire_minutes = 90 #进程运行过期时间
     
        if not os.path.exists(COMMAND_PID_ROOT_PATH):
            os.mkdir(COMMAND_PID_ROOT_PATH)
     
        datas = os.listdir(COMMAND_PID_ROOT_PATH)
        pid_infos = []
        for f in datas:
            file_path = os.path.join(COMMAND_PID_ROOT_PATH,f)
            if os.path.isfile(file_path):
                fid = file(file_path,"r")
                fdata = fid.read() #文件中内容格式为{pid}|{start_time}
                fid.close()
                d = fdata.split("|")
                d.append(file_path)
                pid_infos.append(d) 
                
        dt_now = datetime.datetime.now()
                
        for pid,start_time,file_path in pid_infos:
            start_time_d = datetime.datetime.strptime(start_time,"%Y-%m-%d %H:%M:%S")
            end_time  = start_time_d + datetime.timedelta(minutes = expire_minutes)
            
            if end_time <= dt_now: #超时了
                kill_cmd = "kill -9 %s"%pid
                if os.system(kill_cmd) == 0:
                    logger.info(
                        "success kill pid info pid='%s',start_time='%s',file_path='%s'"%(
                             pid,start_time,file_path,
                            )
                    )
                else:
                    logger.info(
                        "fail kill pid info pid='%s',start_time='%s',file_path='%s'"%(
                             pid,start_time,file_path,
                            )
                    )
     
        logger.info("****ending monitor commands*****")
     
    if __name__ == "__main__":
        monitor()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 已采纳回答 12月16日
  • 创建了问题 12月15日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)