Python多处理和数据库条目

2024-05-19 14:31:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为数字法医调查员设计一个框架,以便在硕士研究生的“顶点计划”中互相比较文件。但是,我遇到了一点障碍。。。在

我尝试在比较上实现多处理,因为使用单个核心似乎非常慢。但是,我遇到的问题是,当代码将信息输入SQLite数据库时。当两个内核几乎同时完成时,偶尔会出现“databaseislocked”错误。在

在我的数据库操作中遇到的一个简单的问题,就是我在多进程环境中遇到的错误?如果没有,有没有一种方法是安全的,不会导致随机错误?在

谢谢!在


Tags: 文件代码框架信息数据库核心错误数字
2条回答

您的问题是您试图让多个编写器访问一个玩具数据库,即存储在单个文件中的sqlite。使用Lock可能会有所帮助,但它会扼杀多进程的吞吐量,因为要等待锁时间。本质上,锁瓶颈将序列化您的程序。在

在几乎任何平台上设置MySQL或Postgres都很简单,有几个优秀的Python模块可以访问它们。使用其中一个可以完全消除这个问题。在

更新评论的扩展回复:

我总是问客户/学生,“你想解决什么问题?”我假设您不是要创建一个数据库系统,而只是使用一个。SQLite3对于一组定义良好的问题来说是可以的,但是多进程访问是其中之一。我可以转而问您的项目的哪个方面需要多进程访问,但我假设您已经确定需要多进程访问。我既不知道你的编程技能,也不知道你对数据库如何工作的理解,所以请原谅我,如果以下是一些基本的。在

通常,您需要一个数据库(我的首选项是Postgres),以及一个Python模块,它可以理解如何与该数据库通信的所有细节。然后你需要知道你想要DBMS为你做什么。好消息是你不是第一个走上这条路的人。在

这个Postgres Wiki里面满是好东西。查看他们在Python Drivers上的页面。Psycopg2是品类领导者,运行在Win/Linux/Mac上。还可以查看Python包索引PyPi,了解许多编写良好的扩展。在

如果您想保持更面向对象的风格,而不是直接编写SQL,那么您可能需要看看ORM类似于SQLAlchemy。这是另一个得到良好维护和广泛部署的类别领导者。在

使用ORM的价值在于,您可以(大部分)将您的头脑放在ObjectLand中,而不是纠结于由面向对象编程与关系数据库管理(relational database management)所造成的认知失调,这是两种截然不同的数据世界观。在

如果你需要更多帮助,给我发邮件。我的地址在我的个人资料里。在

相关问题 更多 >