涉及多重处理时,我在Windows上重新加载Flask应用程序时遇到以下问题。
我创建了一个小例子来说明我面临的问题。
from flask import Flask
from werkzeug import run_simple, _reloader
import multiprocessing as mp
import os
import time
def worker_function(app_id):
while True:
time.sleep(2)
# print(f'Message from {app_id}: {message}')
class MyFlask(Flask):
def __init__(self, name):
super().__init__(name)
print(f'Initialising Flask app {id(self)}')
with open('./test.txt', 'r') as f:
self.message = f.readlines()[0]
self.worker_process = None
self.is_runing_from_reloader = os.environ.get("WERKZEUG_RUN_MAIN") == "true"
def make_workers(self):
self.worker_process = mp.Process(target=worker_function, args=(id(self),))
self.worker_process.start()
app = MyFlask(__name__)
@app.route('/')
def message():
return f'Running from reloader: {app.is_runing_from_reloader}. {app.message}'
if __name__ == "__main__":
mp.freeze_support()
print('Running main...')
app.make_workers()
run_simple(hostname='0.0.0.0', port=5000, application=app, use_reloader=True, extra_files=['./test.txt'])
问题在于,当我对test.txt进行更改时,Flask会发现有更改,但是重新加载应用程序被卡住了。只要worker_process不启动,一切都可以正常运行。
所以,我知道它与工作进程有关,但我无法弄清楚是什么。