Я в ситуации, когда у меня есть основной запрос, но я жду завершения других запросов, которые были отправлены в фоновом режиме. Я пытаюсь следующийКак скрыть основной поток, ожидая завершения какого-либо фонового процесса?
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
}
Мне, возможно, придется больше познакомиться с темами/Мьютексами в рубине или просто параллелизмом вообще, так как я уже делаю много предположений.
Результатом этого является то, что main_request не заполняется. Я пробовал это без семафора, и основной запрос просто отмирает. (NGINX 499) Итак, как мне сделать сбой основного потока, ожидая завершения какого-либо фонового процесса?
Возможно, я собираюсь все это неправильно. Какие-либо предложения? Могу ли я каким-то образом присоединиться к другим запросам/потокам?
Какая проблема вы пытаетесь решить? –
Обновлено название и добавлен ключевой вопрос. – ebichuhamster
Я не уверен, что вы пытаетесь сделать здесь, но вы знали, что Thread имеет метод экземпляра под названием 'join', правильно? 'foo_thread.join' заставляет основной поток ждать, пока' foo_thread' завершит свою работу и вернет управление основному потоку. Это говорит о том, что вы, возможно, захотите более подробно рассказать о том, чего именно вы пытаетесь достичь, потому что может быть лучший способ сделать это, не возившись с параллелизмом. – MarsAtomic