Как динамически добавлять дополнительные запросы в Guzzle Pool?

Я использую Guzzle (http://guzzlephp.org), чтобы ПОЛУЧИТЬ большое количество URL-адресов (~ 300 тыс.). URL-адреса извлекаются из экземпляра Elastic Search, и я хотел бы продолжать добавлять URL-адреса в пул, чтобы пул оставался довольно маленьким, а не добавлял их все сразу.

Это возможно? Я посмотрел на Pool.php, но не нашел способа сделать это. Есть ли способ?


person Pim    schedule 03.11.2014    source источник


Ответы (2)


Используйте while и генератор (выход).

$client = new GuzzleHttp\Client();

$client = new Client();

$requests = function () {
  $uris = ['http://base_url'];
  $visited_uris = []; // maybe database instead of array

  while(len($uris)>0)
    yield new Request('GET', array_pop($uris));
  }
};

$pool = new Pool($client, $requests(), [
  'concurrency' => 5,
  'fulfilled' => function ($response, $index) {
    $new_uri = get_new_uri(); // implement function to get new $uri
    if(in_array($new_uri, $visited_uris)) {
      array_push($uris, $uri);
    }

    array_push($visited_uris, $uri);
  }
]);

$promise = $pool->promise();
$promise->wait();
person Ronald Vodnick    schedule 23.03.2017

Посмотрите на http://mtdowling.com/blog/2014/09/28/guzzle-ring/ в разделе "Отправка запросов одновременно".

Вы можете использовать генератор для добавления запросов, пока пул Guzzle их отправляет.

person Keven    schedule 13.01.2015