Multithreading Flask:多线程时如何写入SQLAlchemy DB?

Multithreading Flask:多线程时如何写入SQLAlchemy DB?,multithreading,flask,sqlalchemy,python-multithreading,Multithreading,Flask,Sqlalchemy,Python Multithreading,我在Flask应用程序中使用多线程,希望每个线程都附加到数据库中的一个条目中。然而,我永远无法让它工作。根据,我有如下内容: def test(arg): some_session.execute(text('update testtable set value = value||"a" where id == 1')) some_session.commit() with app.test_request_context(): executor.m

我在Flask应用程序中使用多线程,希望每个线程都附加到数据库中的一个条目中。然而,我永远无法让它工作。根据,我有如下内容:

def test(arg):
    some_session.execute(text('update testtable set value = value||"a" where id == 1'))
    some_session.commit()

with app.test_request_context():
    executor.map(test,'arg')
这将在多个线程中调用
test()。如果我只是运行
some_session.execute(text('updatetesttable set value=value | | | |“a”其中id=1'))
some_session.commit()
,而不是在多线程中运行的函数中运行,那么这就可以正常工作

以下是我的完整测试代码:

from flask import Flask
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

from flask_executor import Executor

import concurrent.futures

from sqlalchemy.sql import text

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///testdb.sqlite3'
app.config.from_object(__name__)
Session(app)

db = SQLAlchemy(app)

engine = create_engine('sqlite:///testdb.sqlite3', echo=True)
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)
some_session = Session()

executor = Executor(app)

class testtable(db.Model):
    id = db.Column('id', db.Integer, primary_key = True)
    value = db.Column(db.String(100))
    def __init__(self, value):
        self.value = value
        
db.create_all()

entry = testtable('x')
db.session.add(entry)
db.session.commit()

# works
some_session.execute(text('update testtable set value = value||"PLEASEHELP" where id == 1'))
some_session.commit()
  
def test(arg):
    some_session.execute(text('update testtable set value = value||"y" where id == 1'))
    some_session.commit()
    
with app.test_request_context():
    executor.map(test,'arg')
    
Session.remove()

if __name__ == '__main__':
    db.create_all()
    app.run(debug = True)

如何正确执行此操作?

您是否尝试过在测试函数中创建和删除会话?