首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用api下载上千张图片

使用api下载上千张图片
EN

Stack Overflow用户
提问于 2013-05-17 21:20:27
回答 1查看 205关注 0票数 0

我必须在cron作业中使用api下载上千张图像。代码运行良好,但我想对其进行优化。我想,如果我必须下载1000张图片。主文件将作业分成10个部分(每个部分下载100张图片),并将作业分配给10个文件(可能是同一文件的10个实例) 10*100 = 1000张图片(类似于多线程)。主文件将被cron作业调用,rest工作应该像多线程一样。$pid = pcntl_fork();是又好又安全的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-21 17:24:52

编写一个高性能的HTTP爬虫/下载器并非易事。我会描述一下,我会怎么做。请记住,有很多解决方案,所以如果您想更深入地研究这个主题,您可能想要阅读Modern Operating Systems by Andrew S. Tanenbaum

  1. 将需要下载的所有URL放入数据库。
  2. 主流程连接数据库并确定有多少次下载,并使用此参数设置工作进程的下载量。然后,它关闭数据库connection.
  3. The主进程使用pcntl_fork()启动您希望运行的工作进程数量。(是的,它是安全的,但它不容易使用。)
  4. 每个工作者都应该单独连接到数据库,并在它希望处理的URL上建立一个读写锁。在MySQL的情况下,你可以使用SELECT... FOR UPDATE.
  5. The worker,如果在数据库中用它的PID将它处理的记录标记为正在进行中,然后释放数据库锁。
  6. 这个worker处理下载,然后更新数据库它已经完成了所有worker的共享并退出(参见pcntl_wait()),主进程打开一个数据库连接,并清除任何崩溃的worker可能已经离开的所有正在进行的标志。然后,它将关闭数据库,并重复此过程,直到所有下载完成。

这是一条相对安全的旅行路线。但是,请记住,您正在使用的东西远远超出了一般(甚至是有经验的) PHP程序员的知识水平。你必须通过了解Linux (或Windows)进程模型是如何工作的,否则你将会有一个令人难以置信的崩溃的应用程序在你手中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16610136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档