1

我有一个需要生成多个线程并在每个线程中更新数据库的应用程序。当我只产生 1 个线程并进行系列更新时,一切都很好,但是当我尝试多线程时,我在日志中收到错误:

SQLite3::SQLException: SQL 逻辑错误或缺少数据库:回滚事务和 SQLite3::BusyException: 数据库被锁定

我认为锁定是因为第一个错误。

这是导致问题的代码:

all_threads = []
servers.each do |server|
  all_threads << Thread.new(server) do |svr|
    serverCurrent = Server.find(svr.id)
    serverCurrent.state = 3
    serverCurrent.save
  end
end
all_threads.each(&:join)

如果我在线程内循环服务器(所以只创建一个线程,一切都很好)。我使用的数据库是 SQLite3

4

1 回答 1

0

SQLite3 中的线程支持取决于编译时使用的选项。

有关 SQLite3 线程的详细信息: http ://www.sqlite.org/threadsafe.html

可能的解决方案: http: //dev.yorhel.nl/doc/sqlaccess

于 2013-10-10T05:32:12.833 回答