Я создаю веб-приложение, используя Flask. Я подклассифицировал объект Flask, чтобы я мог выполнить кусок кода до того, как приложение выйдет (объект Flask get будет уничтожен). Когда я запускаю это в своем терминале и нажимаю^C, я не вижу «Вы меня слышите?» сообщение, поэтому я предполагаю, что __del__()
не вызван.Fluster destructor
from flask import Flask
class MyFlask (Flask):
def __init__(self, import_name, static_path=None, static_url_path=None,
static_folder='static', template_folder='templates',
instance_path=None, instance_relative_config=False):
Flask.__init__(self, import_name, static_path, static_url_path,
static_folder, template_folder,
instance_path, instance_relative_config)
# Do some stuff ...
def __del__(self):
# Do some stuff ...
print 'Can you hear me?'
app = MyFlask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
Я хочу, чтобы этот код выполнялся в деструкторе, чтобы он работал независимо от того, как приложение загружается. т. е. app.run()
при тестировании, gunicorn hello.py
в производстве. Благодаря!
Вы должны, вероятно, использовать [сигналы] (HTTP://docs.python.org/2/library/signal.html) в вашем скрипте, чтобы поймать окончание программы. – korylprince
Хорошая идея. Достаточно легко поймать SIGINT, но мне нужно провести некоторое исследование того, какие сигналы будут использоваться при развертывании кода. Это будет сделано на Героку. – tweaksp