【发布时间】:2015-07-08 01:19:44
【问题描述】:
使用 Ruby 并使用 Parallel 和 JRuby 1.7.19 编写以下代码,以加快从具有多个值的数组创建散列:
hash = {}
array = [
{"id" => "A001", "value" => 1},
{"id" => "B002", "value" => 0},
{"id" => "C003", "value" => 3},
{"id" => "D004", "value" => 0}]
Parallel.each(array, { in_threads: 5 }) do |item|
if keep_item?(item)
hash[item["id"]] = item
end
end
def keep_item?(item)
item["value"] > 0
end
我注意到,在 Ruby 中并行向哈希添加键可能会出现问题。这段代码是否有任何风险(线程安全、数据丢失、我不知道的奇怪锁等),所以我应该把它作为常规系列 #each 调用?
【问题讨论】:
-
如果您显示
keep_item?的代码以及array中的项目的一些示例会更清楚。 -
我认为它无关紧要。现在添加其中的一些细节。
-
IIRC,核心类不是线程安全的。添加互斥锁能解决问题吗?
标签: ruby multithreading hash parallel-processing jruby