Во Flask я запускаю другой поток, чтобы запустить трудоемкую задачу, которая требует обновления mysql, как я могу использовать Flask_sqlalchemy в этой теме?
Я пытаюсь запустить скрипт bashкогда запросить URL на моем сайте.Поскольку скрипту bash требуется много времени для запуска, я не хочу, чтобы он блокировал основной поток фляги .Поэтому я запускаю другой поток , чтобы запустить его.Когда я это сделал, я обнаружил, что мне нужно получить колбу app_context
для использования Flask_sqlalchemy
.Поэтому я сделал так:
часть моего кода:
@manage_git.route('/makefile', methods=['POST'])
def makefile():
Threading(target=mkfile, args=(local_git_dir, git_id)).start()
return redirect(url_for('manage_git.index'))
def mkfile(local_git_dir, git_id):
from manage import app
subprocess.Popen(['bash', 'makefile.sh'])
with app.app_context():
git_db = GitDb.query.filter_by(id=git_id).first()
git_db.make = True
db.session.add(git_db)
db.session.commit()
Я просто хочу, чтобы app_context использовал Flask_sqlalchemy, но я импортирую глобальную переменную app
.Я не думаю, что это хороший способ решить эту проблему.
Мне бы очень помогло, если бы вы могли рассказать мне о: Есть ли лучший способ получить app_context фляги? Или есть другой лучший способ решить мою проблему?
---- дополнительный: ----
exts.py :
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
init .py :
from flask import FLask
from config import config
from .exts import db, login_manager
def create_app(config_name):
app = Flask(__name__)
app_config = config[config_name]
app.config.from_object(app_config)
app_config.init_app(app)
db.init_app(app)
from .manage_git import manage_git as manage_git_blueprint
app.register_blueprint(manage_git_blueprint)
# ......
return app
manage.py :
from app import create_app
from app.models import *
app = create_app('default')
if __name__ == '__main__':
app.run()