laravel — Google API PHP библиотека files.get параллельно

Я хочу запустить файл files.list, чтобы получить список файлов на диске пользователя, а затем параллельно запустить файл files.get для загрузки файлов. Проблема состоит в том, что когда параллельной операции предшествует один запрос (files.list или files.get) к API, клиент Google разрывается с «Неподдерживаемыми типами операндов» в / vendor / guzzlehttp / guzzle / src / Handler / CurlFactory .php line 140.

Я использую официальный Google PHP клиент вместе с Параллельная карта Амфпа ().

Мой код выглядит так:

function __construct($token, $refresh_token)
{
$google_client = new \Google_Client();
// ...........
$this->api = new \Google_Service_Drive($google_client);
}


public function downloadFile($remote_file_id)
{
$file = $this->api->files->get($remote_file_id, ['alt' => 'media']);
return $file->getBody()->getContents();
}


public function downloadFiles($files_ids)
{
$download_jobs = parallelMap($files_ids, function ($file_id) {
return $this->downloadFile($file_id);
});

return wait($download_jobs);
}

// $storage = new Storage(..., ...);

$files1 = [
0 => "1s9aaHl8UsTswPMsXAt6X_ooDY0idv27dfSR4ysWBI5J2KSuvqw",
1 => "1ZKQmozeA9TfUDp5dTs7CDuRcuesBhkK_iUe4XG3L1nE9ySRz6Q",
2 => "12kGcMS_l58cGJWvdOyQRLqwbbWhTHeA_OBuVITbeMcN0V0PnPA",
3 => "1ETVMmfno_DUn7KloyUpzukOFlt0QcinqZ0C2pRgff-osIHyf-Q",
4 => "1P6CIe7A8qsgLLHf3AZn0Gj4YsTHPsGIZRok0_Pke60QeAXGoMg",
5 => "1d8K7WvDqT40b1MGIDWMxK010invlmaX4e6qdc2pui7TV3Z4liQ",
];

$downloaded = $storage->downloadFile($files1[0]); // if uncommented, this causes downloadFiles to break
$downloaded = $storage->downloadFiles($files1);

Кажется, что первый запрос делает что-то внутренне с клиентом Google, а затем параллельные запросы перестают работать. Если я только запускаю downloadFiles (), это работает гладко. Даже это работает:

    $files = [];
$files[] = $storage->downloadFiles([$files1[0]]);
$files[] = $storage->downloadFiles([$files1[1]]);
$files[] = $storage->downloadFiles([$files1[2]]);
$files[] = $storage->downloadFiles([$files1[3]]);
  1. Почему клиентская библиотека Google ломается при параллельной работе?
  2. Какова была бы лучшая практика для параллельной загрузки дисков на PHP + Laravel? Я следую рекомендациям Google, обрабатываю их исключения и каждый код ошибки в отдельности.

Я использую PHP 7.2.11

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …