gpt4 book ai didi

ruby-on-rails - ruby 运行多个线程的安全方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:58:54 24 4
gpt4 key购买 nike

我有一项服务可以读取 CSV 文件中的所有行,然后导入到数据库中。该过程只是读取文件并写入数据库,不需要在数据库上查找或更新。所以我想通过代码加速这个过程:

CSV.foreach(@file.path, encoding: 'BOM|UTF-8:UTF-8', headers: true).each do |row|
# start thread i
Record.create(row)
# end thread i
end

我希望它与多个线程一起运行,并且通过 10 个线程来保持服务器 RAM 的数量不会占用太多。我尝试使用 Concurrent::FixedThreadPool,但它有时会失去与 DB 的连接,尽管我只是设置了 5 个线程运行

有安全线程运行的想法吗?

最佳答案

尝试使用Mutex

mutex = Mutex.new
CSV.foreach(@file.path, encoding: 'BOM|UTF-8:UTF-8', headers: true).each do |row|
threads = Thread.new do
mutex.synchronize do
Record.create(row)
end
end
end
threads.each(&:join)

希望对您有所帮助。

关于ruby-on-rails - ruby 运行多个线程的安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com