Python “创建”的最佳实践;旗;对于以db作为进程之间桥梁的多进程项目?

Python “创建”的最佳实践;旗;对于以db作为进程之间桥梁的多进程项目?,python,design-patterns,database-design,Python,Design Patterns,Database Design,我有两个过程:1)从另一个网站获取信息,进行所需的完整计算并将结果放入db 2)web app(Flask)从db获取数据并在matpotlib的帮助下绘制绘图。这两个进程不通信,但它们使用一个数据库 问题:现在一切正常,但绘制绘图并将其保存到web app项目的文件夹是一项耗时的操作,显示带有绘图的页面大约需要5秒钟。每次请求网页时都会创建图片,因为数据可以在随机时刻添加到数据库中,用户应该获得包含所有信息的绘图 我如何看待解决方案:在db中创建只有一行和两列的表:id=1,在db中创建布尔字

我有两个过程:1)从另一个网站获取信息,进行所需的完整计算并将结果放入db 2)web app(Flask)从db获取数据并在matpotlib的帮助下绘制绘图。这两个进程不通信,但它们使用一个数据库

问题:现在一切正常,但绘制绘图并将其保存到web app项目的文件夹是一项耗时的操作,显示带有绘图的页面大约需要5秒钟。每次请求网页时都会创建图片,因为数据可以在随机时刻添加到数据库中,用户应该获得包含所有信息的绘图

我如何看待解决方案:在db中创建只有一行和两列的表:id=1,在db中创建布尔字段。让我们调用布尔列来更新。当scraper进程将一些新数据放入数据库时,we change被更新为True。当第二个进程web应用程序从db请求数据时,它会更改为“更新为False”。因此,仅当通过刮板过程向db提供新数据时,才会重新绘制图片,否则我们将使用旧图片


我的解决方案好吗?请分享其他的方法。

我认为实现锁定机制不是一个好主意,因为DBMS已经有了自己的锁定机制。也就是说,如果App1在IS_UPDATED=True和IS_UPDATED=False之间崩溃,锁将保持活动状态

典型的解决方案基于事务隔离级别。我想,App1在单个事务的范围内进行了大量更新,因此如果您设置了
REPEATABLE READ
SERILIZABLE
级别,那么App2将始终获得最后一个一致的数据版本

第二点是隔离实现方法。使用阻塞DBMS时,App2将等待App1完成,而基于版本的DBMS允许App2立即读取最后一个一致的数据,不包括尚未提交的App1修改。也就是说,SQL Server支持这两种方法,但需要进行一些设置


有关更多详细信息,请参阅包含解释和示例的“”手册(第一版也有俄语版本)。

是否有任何东西阻止您让刮刀过程绘制图形?这个人似乎知道什么时候需要绘制新的绘图,而不需要任何同步。@shmee这是在webapp中制作的,因为我们在服务器上运行webapp时遇到了一些问题,并且不清楚文件夹最后将是哪个根目录,所以最初的olot绘图是在webapp中制作的,现在我拥有了我所拥有的。@shmee:我将绘图移到了另一个过程中。现在我有一个启动程序,每天早上7点后启动刮板机作为子进程,如果刮板机完成得很好,启动程序启动绘图子进程并检查是否完成得很好。第二天,发射器重复所有步骤。Flask webserver作为单独的进程/应用程序存在,并应用于具有图片的数据库和文件夹,如果图片可用,则显示它们,否则不显示它们,用户仅获取数据库信息。因此,图片总是根据lattest db信息更新。非常感谢你的建议。仅供参考,这是刮刀(刮,刮,刮)不是scrapper@barny谢谢,我试着记住它,下次把单词写对。我不是以英语为母语的人,在没有翻译的情况下写了这篇文章。这不是锁定机制,它更像是一个信号系统,process2应该创建新图片还是使用旧图片。对db的Process2请求不需要知道Process1和db之间的事务结束。我已将绘图移到另一个进程。现在我有了启动程序流程,在早上7点后启动刮板机作为子流程,如果刮板机完成得很好,启动程序启动绘图子流程并检查是否完成得很好。第二天,launcher重复所有步骤。Flask webserver作为单独的应用程序存在,并应用于数据库和带有图片的文件夹,如果图片可用,则会显示它们,否则用户只能获取数据库信息。因此,PIC始终根据lattest db信息进行更新。非常感谢,我会看看这本书,因为我需要在某处学习一些建筑技巧