请问如何高效率下载 API 中的 2000 万 张图片?一张一张下载要下载 2-3月以上!

 public function handle()
    {
        ///API中有大约 2000万张图片
        /// 需要下载到服务里面
        $url = 'https://www.x.com';
        //API数据结构
       [
            'total'=>200000000000000,
            'img'=>[
                '1'=>'https://www.x.com/1.png',
                '2'=>'https://www.x.com/2.png',
                '3'=>'https://www.x.com/3.png'
            ]
        ];
       //获取的全部循环次数以及图片地址
      $response =   Http::get($url);
        for ($i=0;$i<$response->json()['total'];$i++){
            //请求图片真是地址返回对象结果
           $img= Http::get($response->json()['img'][$i]);
           //进行图片下载并且返回图片保存的随机名字
          $imagesName[$i] = Storage::disk('public')->put('images',$img);
          //保存到数据库
            Pic::create($imagesName[$i]);
    }

如果只是按照以上的写法一张一张下载保存,我粗略的计算下需要下载2-3月差不多能下载完成;服务器16核,24G内存!请问下如何能更快的下载完成?

如果启用多次每次都是从第一张开始循环,也是没有用的!

php artisan down:img

希望大家给我指条明路 -如果方便的话可以附上代码 在此先谢谢了!

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 17
xianyunyehe

多进程

4年前 评论
李小明 (楼主) 4年前
xianyunyehe (作者) 4年前
李小明 (楼主) 4年前

可以搜一下 guzzle多线程。有很多例子。

4年前 评论
李小明 (楼主) 4年前
普罗米修斯 4年前

每个下载都生成一个任务扔队列里,队列设置多点线程

4年前 评论
李小明 (楼主) 4年前

用swoole或go的协程不香吗 :joy:

4年前 评论

这种 io 操作就别用 php 了,用 node 什么的快的多。

4年前 评论
韩槑槑 (作者) 4年前
aa24615 4年前
_杭城浪子 4年前
农村闲散劳动力 4年前
韩槑槑 (作者) 4年前

类似需求我之前做过,是用的 go 写个脚本开协程去下载,速度嗖嗖的

4年前 评论

swoole ,

go(function() use($i) {
         //请求图片真是地址返回对象结果
           $img= Http::get($response->json()['img'][$i]);
           //进行图片下载并且返回图片保存的随机名字
          $imagesName[$i] = Storage::disk('public')->put('images',$img);
          //保存到数据库
            Pic::create($imagesName[$i]);
});
4年前 评论

七牛云,镜像存储,然后get_headers,七牛云会帮你自动下载

4年前 评论
hldh214 4年前
哓东 4年前
wangchunbo 4年前

python 也可以,比较香

4年前 评论

拿移动硬盘去拷估计比较快 :joy:

4年前 评论
xujinhuan 4年前

用 laravel 写可以把具体操作图片的代码放到队列里去,然后循环分发任务,队列多开几个进程,其实很简单,耗时任务都是这么玩的,完全不需要 swoole node.js go,一个小功能,没必要小题大做

4年前 评论
Tab

第一步 查询接口数据 将下载图片任务写入队列 第二步 服务器开多个执行队列进程

4年前 评论
aa24615

用迅雷不香吗?

4年前 评论

人生苦短,不如python

4年前 评论

用laravel 多个 job 下载

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!