带烧瓶和烧瓶管理员的多线程sqlalchemy

时间:2016-05-10 11:47:44

标签: python multithreading flask sqlalchemy flask-admin

我创建了一个python + sqlalchemy的东西。细节并不重要。它创建和管理数据库,从中读取信息,与外部组件联系并更新数据库。它有几个线程来启用并行处理,并使用scoped_session对象为每个线程创建一个会话对象。重入锁可以防止线程创建数据库冲突。

很酷,它有效。

现在我需要一个GUI来检查和修改数据库。我安装了烧瓶和烧瓶管理员。

坏。它不再起作用了。

主程序基本上启动所有后台处理线程,然后将控制传递给主程序中的flask循环。只要我不用gui做任何数据库操作,它就可以工作。只要我在flask-admin中读取数据库,我的工作线程就会开始抛出异常。

我的第一次尝试创建了“会话中不存在的对象”错误。显然,flask-admin会在某些时候冲洗所有内容。

在我的第二次尝试中,我将session.add()添加到我的工作线程中,以便在它们被使用之前将对象添加回它们的会话,以防它们被烧瓶分离。不行。尽管没有修改任何内容,但出现断言错误“密钥的身份映射中已存在冲突状态...”。

在我的第三次尝试中,我尝试使用merge而不是add()。现在我开始获得嵌套回滚错误。

这是一个绝望的工具组合吗?

这不是关键任务应用程序,我可以根据工作线程中的需要经常刷新数据库。它不需要提供最佳性能。它只需要工作。

[R

0 个答案:

没有答案
相关问题