Я запускаю скрипт Imagick, который загружает сотни изображений и обрабатывает их вместе различными способами. Скрипт в настоящее время тратит около 95% своего времени на загрузку изображений и получает их синхронно, так что очевидно, что было бы полезно извлекать их асинхронно.
for ($i=0;$i<$quantity;$i++) {
$a=$arranged[$i];
$url = $a->url;
/* time new image operation */
$download_time_start = getTime();
$temp=new Imagick($url);
$download_time_end = getTime();
$download_time += ($download_time_end - $download_time_start);
/* end time */
Я пытаюсь найти оптимальный способ заставить загрузки происходить параллельно. В настоящее время приложение находится на AWS.
Опция 1: Используйте что-то вроде curl_multi_exec для параллельного сбора изображений в скрипте PHP.
Вариант 2: Используйте что-то вроде сервиса SQS Amazon и рабочих, чтобы загрузить изображения, сохранить их в S3 и затем обработать их после завершения.
Интуитивно понятно, что вариант 1 кажется более быстрым, но более опасным, поскольку большое количество больших изображений может увеличить объем доступной оперативной памяти для этого экземпляра. Я также изо всех сил пытаюсь найти какие-либо примеры того, кто использует curl_multi для получения изображений таким способом. Вариант 2 считается неэффективным, поскольку время, необходимое для записи и последующего считывания всех изображений между экземпляром и S3, может быть значительным.
Любой совет приветствуется
Задача ещё не решена.
Других решений пока нет …