Php 使用api下载1000个图像

Php 使用api下载1000个图像,php,cron,fork,Php,Cron,Fork,我必须在cron作业中使用api下载1000个图像。代码运行良好,但我想对其进行优化。我想,如果我必须下载1000张图片。主文件将作业分为10个部分(每个部分下载100个图像),并将作业分配到10个文件(可能是同一文件的10个实例)10*100=1000个图像(如多线程)。我可以使用curl,但它在同一台服务器上,所以应该有更快的方式来运行文件吗?我想让它像多线程一样。主文件将由cron作业调用,其余工作应类似于多线程。是$pid=pcntl_fork();写一个高性能的HTTP爬虫程序/下载程

我必须在cron作业中使用api下载1000个图像。代码运行良好,但我想对其进行优化。我想,如果我必须下载1000张图片。主文件将作业分为10个部分(每个部分下载100个图像),并将作业分配到10个文件(可能是同一文件的10个实例)10*100=1000个图像(如多线程)。我可以使用curl,但它在同一台服务器上,所以应该有更快的方式来运行文件吗?我想让它像多线程一样。主文件将由cron作业调用,其余工作应类似于多线程。是$pid=pcntl_fork();写一个高性能的HTTP爬虫程序/下载程序不是一件容易的事。我会描述,我会怎么做。请记住,有很多解决方案,所以如果你想更深入地研究这个主题,你可能需要阅读

  • 将所有需要下载的URL放入数据库
  • 主进程连接数据库并确定有多少下载,并使用此参数设置工作进程的下载量然后关闭数据库连接。
  • 主进程用于开始您希望运行的工作进程数量。(是的,它是安全的,但不容易使用。)
  • 每个工作程序都应分别连接到数据库,并在其希望处理的URL上建立读写锁。对于MySQL,您将使用
  • 工作人员应使用其PID将其处理的记录标记为数据库中正在进行的记录,然后释放数据库锁
  • 工作人员处理下载,然后更新数据库,确保下载完成
  • 一旦所有工作进程完成共享并退出(请参阅),主进程将打开一个数据库连接,并清除所有崩溃的工作进程可能已离开的all in process标志。然后关闭数据库连接
  • 重复该过程,直到所有下载完成
  • 这是一条相对安全的旅行路线。但是,请记住,您正在玩的东西远远超出了普通(甚至有经验)PHP程序员的知识水平。您必须阅读Linux(或Windows)进程模型的工作原理,否则您将拥有一个令人难以置信的应用程序