Watcher运行线程数组

时间:2012-02-07 03:12:48

标签: ruby multithreading loops

我有哈希结构,如['a'=> false'b' => false'c' => false,......]。 我的条件是:

  • 我正在为每个元素使用多线程并运行一些代码,以便根据特定条件将'false'设置为true。
  • 此循环将继续,直到所有元素的值变为“true”或某些“超时”。
  • 我想要一个观察者,它应该在每个循环上收集这些键,其值变为“真”,因为我正在为这些“真正的”有价元素运行另一个代码。

但是,我写的代码没有ruby-ism。感觉就像编写java代码一样。 请帮助我做红宝石主义的方法。

1 个答案:

答案 0 :(得分:0)

以下是显示从active_support中提取的两个哈希之间差异的代码。

# from https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/diff.rb
def hash_diff(h1, h2)
  h1.dup.delete_if { |k, v| h2[k] == v }.merge!(h2.dup.delete_if { |k, v| h1.has_key?(k) })
end

现在,您可以使用它来检测循环的每次迭代之间的差异:

previous ||= my_hash
diff = hash_diff(my_hash, previous)
puts "Difference: #{diff.inspect}" unless diff.keys.empty?
previous = my_hash

请注意,您可能必须为此代码使用互斥锁,以避免竞争条件和其他令人讨厌的错误。