gpt4 book ai didi

python - 使用 SQLite 和 Peewee 并发写入

转载 作者:太空宇宙 更新时间:2023-11-03 15:15:02 28 4
gpt4 key购买 nike

我计划将 SQLite 和 Peewee (ORM) 用于轻型内部 Web 服务(每秒 <20 个请求)。 Web 服务可以处理多个线程上的多个同时请求。在每次请求期间,数据库都将被读取和写入。这意味着我需要具备并发读取和写入的能力。如果数据在读取和写入之间发生变化,对于此应用程序无关紧要。

SQLite FAQ表示允许并发读取,但来自多个线程的并发写入需要获取文件锁。我的问题是:Peewee 会为我处理这个锁定,还是我需要在我的代码中做些什么才能使这成为可能?

Peewee 数据库对象在线程之间共享。我认为这意味着数据库连接也是共享的。

我找不到 Peewee 的具体答案,所以我在这里问。

最佳答案

Sqlite 是执行锁定的,尽管我知道您可能会感到困惑——FAQ 的措辞有点含糊:

When any process wants to write, it must lock the entire database file for the duration of its update. But that normally only takes a few milliseconds. Other processes just wait on the writer to finish then continue about their business. Other embedded SQL database engines typically only allow a single process to connect to the database at once.

所以如果你有两个线程,每个线程都有自己的连接,并且一个线程获得了写锁,另一个线程将不得不等待锁被释放才能开始写。

查看 pysqlite,默认的繁忙超时看起来是 5 秒,因此第二个线程在引发 OperationalError 之前应该等待最多 5 秒。

此外,我建议使用 threadlocals=True 实例化您的 SqliteDatabase。这将存储每个线程的连接。

关于python - 使用 SQLite 和 Peewee 并发写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921712/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com