有没有办法将Thread的上下文(基本上是Thread.current
哈希)传递给另一个线程。
我正在从现有线程做Thread.new
,我希望这个新线程可以访问当前(即调用线程)的哈希值。
这是在ruby MRI 1.9.3 / Rails 3.2.8环境中。
答案 0 :(得分:0)
Thread.new do
$binding = binding
msg = "Message from another thread"
end.join
Thread.new($binding){|b| eval("p msg", b)}.join
# => "Message from another thread"
答案 1 :(得分:0)
如果您需要传递光纤局部值,请使用:
Thread.current[:foo] = 'bar'
Thread.new(Thread.current) do |parent_context|
parent_context.keys.each do |k|
Thread.current[k] = parent_context[k]
end
puts Thread.current[:foo]
end.join
但是对于线程局部值,您应该使用Thread#thread_variable_set和Thread#thread_variable_get:
Thread.current.thread_variable_set(:foo, 'bar')
Thread.new((Thread.current)) do |parent_context|
puts parent_context.thread_variable_get(:foo)
end.join
Check out docs表示光纤和线程本地值之间的差异