slim-akim
Новичок
php и потоки, как организовать параллельное обращение к методам объектов
Здравствуйте!
Друзья, столкнулся с такой проблемой. Разрабатывается виджет "поиска авиабилетов". Источников данных несколько. Т.к. методы запроса данных отличаются, зачастую значительно,
отличаются, у разных поставщиков данных, то было принято решения для каждого источник написать свой класс. Т.е. параметры входные параметры для всех источников одинаковые, а
обработка (зарпрос, получение ответа, его разбор) разные. Все объекты источников возвразают одинаковой структуры массив. Массивы затем объединяются в один и выводятся
пользователю.
Сейчас это выглядит примерно таким образом:
Сейчас получается так, что запросы выполняются последовательно (во время создания объектов N), на это естественно уходит достаточно времени. Мне известно, что php как таковой,
многопоточность не поддерживает. Так же известны некоторые примеры эмуляции её с помощью proc_exec и curl_multi. Но не знаю как применить их именно для параллельного создания
объектов, или как вариант, параллельного выполнения функций этих объектов, например:
Если у вас есть опыт решения подобных вопросов, пожалуйста, поделитесь.
Буду благодарен за ваши советы,
спасибо.
Здравствуйте!
Друзья, столкнулся с такой проблемой. Разрабатывается виджет "поиска авиабилетов". Источников данных несколько. Т.к. методы запроса данных отличаются, зачастую значительно,
отличаются, у разных поставщиков данных, то было принято решения для каждого источник написать свой класс. Т.е. параметры входные параметры для всех источников одинаковые, а
обработка (зарпрос, получение ответа, его разбор) разные. Все объекты источников возвразают одинаковой структуры массив. Массивы затем объединяются в один и выводятся
пользователю.
Сейчас это выглядит примерно таким образом:
PHP:
function getData($params)
{
$source1 = new source1($params);
$source2 = new source2($params);
$source3 = new source3($params);
$offers = array_merge( $source1->offers, $source2->offers, $source3->offers );
return $offers;
}
многопоточность не поддерживает. Так же известны некоторые примеры эмуляции её с помощью proc_exec и curl_multi. Но не знаю как применить их именно для параллельного создания
объектов, или как вариант, параллельного выполнения функций этих объектов, например:
PHP:
function getData($params)
{
$source1 = new source1();
$source2 = new source3();
$source3 = new source3();
// а вот это уже по потокам распределить
$offers1 = $source1->getOffers( $params );
$offers2 = $source2->getOffers( $params );
$offers3 = $source3->getOffers( $params );
// дождаться выполнения последнего и объединить
$offers = array_merge( $offers1, $offers2, $offers3);
return $offers;
}
Буду благодарен за ваши советы,
спасибо.