我处于主要请求的情况,但我正在等待在后台发送的其他请求的完成。我正在尝试以下
myclass.rb
# class variables
@@semaphore = Mutex.new
# class methods ...
def entry ...
def main_request ...
def background_request ...
/条目
$unavailable = true
# starts /main_request and /background_request
/ main_request
@@semaphore.synchronize{
while($unavailable)
sleep(1)
end
}
# use information updated by background_request
/ background_request
@@semaphore.synchronize{
$unavailable = false
}
我可能不得不更熟悉ruby中的线程/互斥体,或者只是一般的并发性,因为我已经做了很多假设。
结果是main_request不能完成。 我尝试了没有信号量,主要请求似乎就消失了。 (NGINX 499)总之,如何在等待某个后台进程完成时让主线程休眠?
也许我错了。有什么建议?我能以某种方式以某种方式加入不同的请求/线程吗?
答案 0 :(得分:0)
您正在寻找join
方法。
http://ruby-doc.org/core-2.2.0/Thread.html#method-i-join
只需在将线程创建为变量(例如x = Thread.new
)时保存指向线程的指针,并在准备好等待它们完成之后再继续执行x.join
。