1

我正在编写一个脚本来下载我的所有图像,计算 MD5 哈希,然后将该哈希存储在数据库的新列中。我有一个脚本,可以从数据库中选择图像并将它们保存在本地。图像的唯一 ID 成为文件名。

我的问题是,虽然cURLQueue非常适合快速下载许多文件,但在回调中计算每个文件的 MD5 哈希会减慢下载速度。那是我的第一次尝试。对于我的下一次尝试,我想将我的代码的下载和散列部分分开。做这个的最好方式是什么?我更喜欢使用 PHP,因为这是我最熟悉的,也是我们的服务器运行的,但是 PHP 的线程支持至少可以说是缺乏的。

想法是有一个建立 SQLite 连接的父进程,然后产生许多选择图像的子进程,计算它的哈希值,将其存储在数据库中,然后删除图像。我走在正确的道路上吗?

4

2 回答 2

1

有很多方法可以解决这个问题,但是您选择哪种方法实际上取决于您的项目的具体情况。

一种简单的方法是使用一个 PHP 下载图像,然后将它们放在文件系统上,并在队列数据库中添加一个条目。然后第二个 PHP 程序将读取队列,并处理那些等待。

对于第二个 PHP 程序,您可以设置一个 cron 作业来定期检查并处理所有等待的内容。第二种方法是每次下载完成时在后台生成 PHP 程序。第二种方法更优化,但涉及更多一点。查看下面的帖子,了解如何在后台运行 PHP 脚本。

有没有办法在不等待命令完成的情况下使用 shell_exec ?

于 2012-11-19T20:23:26.757 回答
0

我在工作中遇到过类似的问题,但它需要像rabbitmq这样的 amqp 服务器。

想象一下有 3 个 php 脚本:

  • 首先:将 url 添加到队列中
  • 第二:从队列中获取url,下载文件并将下载的文件名加入队列
  • 第三:获取文件名到队列并将md5设置到数据库中

我们使用这种方式使用 python 脚本处理多个图像下载/处理(php 不是那么远)。

您可以在这里查看一些 php 库和一些基本示例。

通过这种方式,我们可以根据每个队列长度扩展每个工作人员。因此,如果您要下载大量 url,您只需启动另一个脚本 #2,如果您有很多未处理的文件,您只需启动一个新脚本 #3,依此类推。

于 2012-11-19T21:35:42.403 回答