Как инициировать многопроцессорный класс в приложении фляги - PullRequest
0 голосов
/ 01 ноября 2018

Я следовал Учебник Мигеля Гринберга по настойке , мое приложение имеет такую ​​же структуру (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.")

Полагаю, теперь мне нужно один раз инициализировать работника где-то в моей инициализации, чтобы иметь возможность помещать вещи в очередь из других мест моего приложения, но я не понимаю, как его инициализировать и как вызвать это из других частей.

1 Ответ

0 голосов
/ 01 декабря 2018

Решение состояло в том, чтобы поместить его вне приложения фляги и поддерживать там. Там нет необходимости делать это внутри приложения колбы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...