gpt4 book ai didi

ruby - Ruby 中的线程。线程池的替代品

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

假设我有 2 个不同的表格需要填写。每个表可以有不同数量的源文件。我想并行填充表格,但每个源文件都会被读取。例子:A表:3个源文件,B表:1个源文件

tables = {'A': [sourcefileA_1, sourcefileA_2,sourcefileA_3], 'B':[sourcefileB_1]}
threads = []
tables.each do |table,source_files|
threads << Thread.new { do_something(table, source_files)}
end
threads.each(&:join)
def do_something(table, source_files)
source_files.each do |s_file|
#do something
end

因此,线程数取决于我拥有的表数。假设现在我有 500.000 张 table 和一台普通的 Mac Pro。我考虑过使用 ThreadPool,但是,如果 thread 中发生错误,则不会显示。相比之下,如果我只使用线程,仍然会显示错误。是否有任何 gem 可以帮助我使用线程池,并且如果它发生在其中一个线程中会抛出错误。

关于不显示错误,考虑以下内容:

require 'thread/pool' # from the ruby-thread gem
pool = Thread.pool(4)
pool.process do
puts(b)
end

b 未指定,但未显示正常错误消息。

最佳答案

首先,

检查 this关于错误处理的(答案)。

其次,有一个不错的 gem,叫做 concurrent-ruby其中有许多其他语言的多线程方面是用 ruby​​ 实现的。

另一个需要考虑的问题是 ruby​​ 并不是真正的并发,因为 GIL .但是你有纤程,它对你的情况很好,异步 IO。

关于ruby - Ruby 中的线程。线程池的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44265053/

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