我一直关注Miguel Grinberg's Flask tutorial,我的应用程序具有相同的结构(https://github.com/miguelgrinberg/microblog/tree/v0.22)。
我现在想在正在监听队列的类中添加一个多处理函数,但是我不确定如何正确地初始化它。
如本教程中的建议here一样,我的初始化看起来像这样:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# and so on
db = SQLAlchemy()
migrate = Migrate()
# and so on
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
# and so on
db.init_app(app)
migrate.init_app(app, db)
# and so on
from app.auth import bp as auth_bp
app.register_blueprint(auth_bp)
# and so on
return app
from app import models
多重处理类位于一个名为worker.py的文件中:
class Worker(object):
def __init__(self):
self._pool = None
self._in_q = Queue()
def start(self):
self._pool = Pool(os.cpu_count())
self._thread = Thread(target=self._process, args=(), daemon=True)
self._thread.start()
def stop(self):
self._pool.close()
self._pool.join()
self._pool = None
self.result_q.put(None)
def _process(self):
while True:
task = self._in_q.get()
if task is None:
print("shutdown")
return
self._pool.apply_async(_work, (w,), callback=finished)
def do_work(self):
# Work on something here
return self
def _work(value):
value = Worker.do_work(value)
return value
def finished(self):
print("I am done.")
我想我现在需要在init的某个位置初始化一次worker,以便随后可以将其从应用程序中其他各个位置放入队列中,但是我既不知道如何初始化它,也不知道如何调用它来自其他部分。
答案 0 :(得分:0)
解决方案是将其放在flask应用程序外部并在其中运行。在flask应用程序内无需执行此操作。