擅长:python、mysql、java
<p>我不太喜欢上面提到的任何方法,因为您不需要Flask脚本来完成这项工作,而且并不是所有的项目都已经使用了Flask脚本。</p>
<p>最简单的方法,就是建立自己的烧瓶子类。在使用<code>Flask(__name__)</code>构建应用程序时,只需添加自己的类并使用它。</p>
<pre><code>def do_something():
print('MyFlaskApp is starting up!')
class MyFlaskApp(Flask):
def run(self, host=None, port=None, debug=None, load_dotenv=True, **options):
if not self.debug or os.getenv('WERKZEUG_RUN_MAIN') == 'true':
with self.app_context():
do_something()
super(MyFlaskApp, self).run(host=host, port=port, debug=debug, load_dotenv=load_dotenv, **options)
app = MyFlaskApp(__name__)
app.run()
</code></pre>
<p>当然,这不会在启动后运行<em>,但在最后调用</em><code>run()</code>之前运行。使用app context,您应该能够对数据库或其他需要app context的内容执行任何操作。这也适用于任何服务器(uwsgi、gunicorn等)。</p>
<p>如果您需要<code>do_something()</code>是非阻塞的,那么您可以用<code>threading.Thread(target=do_something).start()</code>来代替它。</p>
<p>条件语句是在使用调试模式/重载程序时防止双重调用。</p>