烧瓶重新装载器和多处理

时间:2020-06-16 08:37:18

标签: python flask multiprocessing

涉及多重处理时,我在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不启动,一切都可以正常运行。

所以,我知道它与工作进程有关,但我无法弄清楚是什么。

0 个答案:

没有答案
相关问题