Темы будут работать, но это грубый инструмент. Вы можете попробовать что-то вроде этого:
flickr_thread = Thread.start do
@flickr_result = ... # make the Flickr request
end
twitter_thread = Thread.start do
@twitter_result = ... # make the Twitter request
end
# this makes the main thread wait for the other two threads
# before continuing with its execution
flickr_thread.join
twitter_thread.join
# now both @flickr_result and @twitter_result have
# their values (unless an error occurred)
Хотя вам придется немного поработать с кодом и добавить правильное обнаружение ошибок. Сейчас я не могу вспомнить, работают ли переменные экземпляра, когда они объявлены внутри блока потока, локальные переменные не будут работать, если они не были явно объявлены снаружи.
Я бы не назвал это элегантным решением, но я думаю, что оно работает и не слишком сложно. В этом случае, к счастью, нет необходимости в блокировке или синхронизации, кроме соединений, поэтому код читается очень хорошо.
Возможно, вам поможет такой инструмент, как EventMachine (в частности, подпроект em-http-request ), если вы делаете много таких вещей. Вероятно, это могло бы облегчить кодирование на более высоком уровне. Нити трудно понять правильно.