我必须在cron作业中使用api下载1000张图像。代码工作正常,但我想优化它。我想要,如果我必须下载1000张图片。主文件将作业分为10个部分(每个100个图像下载)并将作业分配给10个文件(可能是同一文件的10个实例)10 * 100 = 1000个图像(如多线程)。我可以用curl但它在同一台服务器上,那么是否应该有更快的方式来运行文件?我想做多线程。主文件将由cron job调用,其余工作应该像多线程一样。是$ pid = pcntl_fork();是好的和安全的方式?
答案 0 :(得分:1)
编写高性能HTTP爬虫/下载器并非易事。我会描述,我是怎么做的。请注意,有很多解决方案,因此如果您想深入了解此主题,可能需要阅读Modern Operating Systems by Andrew S. Tanenbaum。
pcntl_fork()
来启动您希望运行的工作量。 (是的,这是安全的,但使用起来并不容易。)SELECT... FOR UPDATE
。pcntl_wait()
),主进程将打开一个数据库连接并清除所有崩溃的工作人员可能已离开的所有正在进行的标记。然后它关闭数据库连接。这是相对安全的旅行路径。但是,请记住,您正在使用超出普通(甚至经验丰富的)PHP编码器知识水平的方法。您必须了解Linux(或Windows)流程模型的工作原理,否则您手中会有一个非常破碎的应用程序。