作者:倩女碧海蓝天_979 | 来源:互联网 | 2023-02-03 11:35
我在Python中创建一个Web爬虫,它收集重定向/链接,将它们添加到数据库,如果链接尚不存在,则将它们作为新行输入.我想使用多线程但有麻烦,因为我必须实时检查是否有一个给定URL的条目.
我最初使用sqlite3
但意识到我不能在不同的线程上同时使用它.我真的不想使用MySQL(或类似的东西),因为它需要更多的磁盘空间并作为单独的服务器运行.反正有没有sqlite3
使用多线程?
1> dan04..:
Python sqlite3
模块的threadsafety
级别为1,这意味着虽然您无法在线程之间共享数据库连接,但多个线程可以同时使用该模块.因此,您可以让每个线程创建自己的数据库连接.
这种方法的问题在于SQLite的写入并发性很差,因此让多个线程同时执行大量的INSERT
s会给你带来可怕的"数据库被锁定"错误.你可以通过使用来改善一些事情PRAGMA JOURNAL_MODE = 'WAL'
,但这只是到目前为止.
如果性能是一个问题,并且不能选择切换到客户端 - 服务器数据库,那么您可能需要做的是保留URL的内存缓存,并安排您的程序,以便您有一个线程,将此缓存与SQLite数据库同步.