当前位置: 首页 > 面试题库 >

Python sqlite3和并发

权弘新
2023-03-14
问题内容

我有一个使用“线程”模块的Python程序。每秒一次,我的程序启动一个新线程,该线程从Web上获取一些数据,并将这些数据存储到我的硬盘中。我想使用sqlite3来存储这些结果,但是我无法使其正常工作。问题似乎与以下几行有关:

conn = sqlite3.connect("mydatabase.db")
  • 如果将这行代码放入每个线程中,则会收到OperationalError通知我数据库文件已锁定。我猜这意味着另一个线程通过sqlite3连接打开了mydatabase.db并已将其锁定。
  • 如果将这行代码放入主程序中,并将连接对象(conn)传递给每个线程,则会收到一个ProgrammingError,表示在线程中创建的SQLite对象只能在同一线程中使用。

以前,我将所有结果存储在CSV文件中,并且没有任何这些文件锁定问题。希望使用sqlite可以实现。有任何想法吗?


问题答案:

您可以使用消费者-
生产者模式。例如,您可以创建线程之间共享的队列。从Web上获取数据的第一个线程将该数据排队在共享队列中。拥有数据库连接的另一个线程使队列中的数据出队,并将其传递给数据库。



 类似资料:
  • 问题内容: 本文在这里建议使用“为了使与并发GC并行年轻一代的GC”。 我的困惑是,为了同时启用并行和并发GC,我应该 使用或 同时使用 和 ? 聚苯乙烯 我正在使用JVM 6。 问题答案: 由于链接的文档是针对1.4.2 VM的,因此我假设您正在使用(JVM 5和6的行为有所不同)。 从http://java.sun.com/docs/hotspot/gc1.4.2/ 如果在命令行上使用了-XX

  • 在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来了解并发和并行之间的区别。 并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。 并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。 并发不是并行。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发

  • 14.1.1 什么是协程 一个应用程序是运行在机器上的一个进程;进程是一个运行在自己内存地址空间里的独立执行体。一个进程由一个或多个操作系统线程组成,这些线程其实是共享同一个内存地址空间的一起工作的执行体。几乎所有'正式'的程序都是多线程的,以便让用户或计算机不必等待,或者能够同时服务多个请求(如 Web 服务器),或增加性能和吞吐量(例如,通过对不同的数据集并行执行代码)。一个并发程序可以在一个

  • 问题内容: 我有一个简单的MYSQL问题。如果我让包含查询 LAST_INSERT_ID() 右后一个 INSERT查询 一个网页,有许多并发用户访问执行其它网页上运行的 INSERT 操作将价值 LAST_INSERT_ID() 是掺假/损坏? 问题答案: 不,它将返回当前连接的插入ID。只要您的脚本没有进行任何其他插入,就可以得到想要的插入。 另请注意,这只会返回生成的ID(例如,自动递增)。

  • tornado.gen — Simplify asynchronous code Decorators Utility functions Legacy interface tornado.concurrent — Work with threads and futures Consumer methods Producer methods tornado.locks – Synchronizat

  • 我正在与spring boot spring@KafkaListener合作。我期望的行为是:我的Kafka侦听器以10个线程读取消息。因此,如果其中一个线程挂起,其他消息将继续读取和处理消息。 我定义了bean of 和spring启动配置: 我看到所有配置都能正常工作,我在jmx中看到了我的10个线程: 但是我做了这样的测试: 如果版本是 也许我的期望不是真的,这是Kafka听众的正确行为。请