如何在等待某个后台进程完成时让主线程休眠?

时间:2016-05-30 02:21:20

标签: ruby-on-rails ruby multithreading

我处于主要请求的情况,但我正在等待在后台发送的其他请求的完成。我正在尝试以下

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)总之,如何在等待某个后台进程完成时让主线程休眠?

也许我错了。有什么建议?我能以某种方式以某种方式加入不同的请求/线程吗?

1 个答案:

答案 0 :(得分:0)

您正在寻找join方法。 http://ruby-doc.org/core-2.2.0/Thread.html#method-i-join

只需在将线程创建为变量(例如x = Thread.new)时保存指向线程的指针,并在准备好等待它们完成之后再继续执行x.join