gpt4 book ai didi

python - 让 SQLite3 与多线程一起工作

转载 作者:行者123 更新时间:2023-11-28 21:05:27 26 4
gpt4 key购买 nike

我正在用 Python 制作一个网络爬虫,它收集重定向/链接,将它们添加到数据库中,如果链接尚不存在,则将它们作为新行输入。我想使用多线程但遇到了麻烦,因为我必须实时检查是否有给定 URL 的条目。

我最初使用的是 sqlite3,但我意识到我不能在不同的线程上同时使用它。我真的不想使用 MySQL(或类似的东西),因为它需要更多的磁盘空间并作为单独的服务器运行。有没有办法让 sqlite3 与多线程一起工作?

最佳答案

Python sqlite3 模块有一个 threadsafety级别 1,这意味着虽然您不能在线程之间共享数据库连接,但多个线程可以同时使用模块。因此,您可以让每个线程创建自己的数据库连接。

这种方法的问题在于 SQLite 的写入并发性很差,因此让多个线程同时执行大量 INSERT 会给您带来可怕的“数据库已锁定”错误。您可以使用 PRAGMA JOURNAL_MODE = 'WAL' 来改善一些事情,但这只是到目前为止。

如果性能是个问题并且不能切换到客户端-服务器数据库,那么您可能需要做的就是在内存中缓存您的 URL,并安排您的程序,以便您拥有一个线程将此缓存与 SQLite 数据库同步。

关于python - 让 SQLite3 与多线程一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123678/

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