有没有办法将线程的上下文(基本上是Thread.current
哈希)传递给另一个线程。
我正在Thread.new
从现有线程做一个,我希望这个新线程能够访问当前(即调用线程的)哈希。
这是在 ruby MRI 1.9.3/Rails 3.2.8 环境中。
有没有办法将线程的上下文(基本上是Thread.current
哈希)传递给另一个线程。
我正在Thread.new
从现有线程做一个,我希望这个新线程能够访问当前(即调用线程的)哈希。
这是在 ruby MRI 1.9.3/Rails 3.2.8 环境中。
如果您需要传递光纤本地值,请使用:
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
查看文档以了解光纤和线程本地值之间的差异
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"