Я следовал Учебник Мигеля Гринберга по настойке , мое приложение имеет такую же структуру (https://github.com/miguelgrinberg/microblog/tree/v0.22).
Теперь я хочу добавить многопроцессорную функцию внутри класса, который прослушивает очередь, но я не уверен, как правильно ее инициализировать.
Как предложено здесь в руководстве, мой init выглядит так:
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.")
Полагаю, теперь мне нужно один раз инициализировать работника где-то в моей инициализации, чтобы иметь возможность помещать вещи в очередь из других мест моего приложения, но я не понимаю, как его инициализировать и как вызвать это из других частей.