我正在运行一个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和工作服务等内容下载图片,将图片存储在S3中,然后在完成后处理。
直观地选项1感觉更快但更危险,因为大量的大图像可能会为该实例提供可用的RAM。我也在努力寻找任何使用curl_multi以这种方式获取图像的人的例子。选项2感觉效率低下,因为在实例和S3之间写入和读回所有图像所花费的时间可能很长。
任何建议表示赞赏