我有一个需要生成多个线程的应用程序,并在每个线程中更新数据库。当我只生成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
答案 0 :(得分:0)
SQLite3中的线程支持取决于编译时使用的选项。
有关SQLite3线程的详细信息: http://www.sqlite.org/threadsafe.html
可能的解决方案: http://dev.yorhel.nl/doc/sqlaccess