【问题标题】:Segmentation Fault in Python multi-threaded Sqlite use!Python多线程Sqlite使用中的Segmentation Fault!
【发布时间】:2011-06-11 12:03:51
【问题描述】:

我正在开发一个在多线程程序中使用 Sqlite 的 python 代码。远程主机调用一些 xmlrpc 函数并创建新线程。在新线程中运行的每个函数都使用 sqlite 将数据插入数据库或从数据库读取数据。

我的问题是,当同时调用服务器超过 5 次时,服务器因“分段错误”而中断。并且输出不提供任何其他信息。知道什么会导致问题吗?

【问题讨论】:

  • 我忘了提到每次创建新线程时我都不会打开/关闭连接。连接是全局的,所有线程都使用它。我这样做是出于性能目的。提交需要这么多时间!
  • 建立一个连接池,每个线程使用一个连接

标签: python multithreading sqlite


【解决方案1】:

如果您阅读 sqlite 文档 (http://www.sqlite.org/threadsafe.html),您会看到它说:

SQLite 支持三种不同的 线程模式:

单线程。在这种模式下,所有 互斥锁被禁用,SQLite 被禁用 不安全地使用多个 一次线程。

多线程。在这种模式下,SQLite 可以 被多个线程安全使用 前提是没有单一数据库 连接同时用于 两个或更多线程。

序列化。在序列化模式下,SQLite 可以被多个线程安全使用 没有限制。

因此,您要么处于单线程模式,要么处于多线程模式并重用连接。仅在顺序模式下重用连接是安全的(速度很慢)

现在,Python 文档声明它不应允许您共享连接。您是在使用 python-sqlite3 模块,还是与数据库进行原生交互?

【讨论】:

    【解决方案2】:

    我的 APSW 模块是线程安全的,您可以使用它。标准的 Python SQLite 不能安全地跨多个线程同时使用。

    【讨论】:

      猜你喜欢
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多