stu*_*uck 5 python sqlite concurrency multithreading peewee
我计划使用 SQLite 和 Peewee (ORM) 来实现轻型内部 Web 服务(每秒<20 个请求)。Web 服务可以处理多个线程上的多个并发请求。在每次请求期间,数据库都会被读取和写入。这意味着我需要具备并发读取和写入的能力。如果数据在读取和写入之间发生变化,对于该应用程序来说并不重要。
SQLite FAQ说允许并发读取,但来自多个线程的并发写入需要获取文件锁。我的问题是:Peewee 是否会为我处理这种锁定,或者我需要在代码中做些什么才能实现这一点?
Peewee 数据库对象在线程之间共享。我认为这意味着数据库连接也是共享的。
我找不到 Peewee 对此的具体答案,所以我在这里问。
Sqlite 是执行锁定的一个,尽管我可以看到您可能会感到困惑——FAQ 的措辞有点含糊:
当任何进程想要写入时,它必须在更新期间锁定整个数据库文件。但这通常只需要几毫秒。其他进程只是等待作者完成然后继续处理他们的业务。其他嵌入式 SQL 数据库引擎通常只允许单个进程同时连接到数据库。
因此,如果您有两个线程,每个线程都有自己的连接,并且其中一个线程获取写锁,则另一个线程必须等待锁释放才能开始写入。
查看 pysqlite,默认的繁忙超时看起来是 5 秒,因此第二个线程在引发OperationalError.
另外,我建议使用threadlocals=True. 这将存储每个线程的连接。
| 归档时间: |
|
| 查看次数: |
4527 次 |
| 最近记录: |