我正在编写一个 Django 项目,其中使用 Popen 打开多个进程。现在,当服务器退出时,这些进程就会被孤立。我有一个函数来终止这些进程,我希望对其进行组织,以便在服务器退出时自动调用该函数。
任何帮助将不胜感激。
由于您尚未指定正在使用哪个 HTTP 服务器(uWSGI、nginx、apache 等),因此您可以在简单的开发服务器上测试此配方。
您可以尝试通过以下方式注册清理功能atexit将在进程终止时调用的模块。您可以通过覆盖 django 的内置函数轻松完成此操作runserver
命令。
创建一个名为运行服务器.py并将其放入$PATH_TO_YOUR_APP/management/commands/
目录。
假设PROCESSES_TO_KILL
是一个全局列表,包含对孤立进程的引用,这些进程将在服务器终止时被终止。
import atexit
import signal
import sys
from django.core.management.commands.runserver import BaseRunserverCommand
class NewRunserverCommand(BaseRunserverCommand):
def __init__(self, *args, **kwargs):
atexit.register(self._exit)
signal.signal(signal.SIGINT, self._handle_SIGINT)
super(Command, self).__init__(*args, **kwargs)
def _exit(self):
for process in PROCESSES_TO_KILL:
process.terminate()
def _handle_SIGINT(signal, frame):
self._exit()
sys.exit(0)
请注意,这对于脚本的正常终止非常有用,但不会在所有情况下都被调用(例如致命的内部错误)。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)