3

我正在构建一个 cron 作业,它执行以下操作:
1. 从 DB
2 中获取记录。对于每条记录,都会向 API 发出一个 curl 请求。(有些请求很快,有些正在上传大图像或视频)。
3、如果一个请求不成功,新建一个参数稍有不同的请求(还是根据记录),重新发送。这可能会发生多次。
4. 请求成功后,执行一些数据库选择/插入(基于导致发送此请求的原始记录)。

发送请求应该并行发生,因为有些需要几分钟(大量上传),有些非常快。

这样做最合适 - 拥有一个从数据库获取记录并为每个记录创建一个进程来处理调用 API 和解析响应的主脚本?或者使用 curl_multi 从同一个脚本同时发送多个请求并在返回时解析每个请求?

如果使用多个进程,那么最好的方法是什么 - PCNTRL、popen 等?
如果使用 curl_multi 我怎么知道哪个数据库记录对应哪个返回请求?

编辑:如果使用 curl multi 我可能会采用这种技术:http
://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/ 这样它就不会等待在我开始处理响应之前完成的所有请求。

谢谢!

4

2 回答 2

1

最后,我使用 PCNTRL 进行多处理(限制并发进程的数量)。在我看来, curl_multi 不会针对数千个请求进行扩展。

于 2011-10-27T12:22:42.090 回答
1

处理大型数据集后,我遇到了类似的问题。

对我来说最简单的答案是制作4 个单独的脚本,每个脚本都编写为占用所涉及的特定数据库列的第四个,在我的情况下进行处理,或者在你的情况下进行 curl 请求。这将防止对其中一个进程的大请求锁定其他进程。

相比之下,使用 curl_multi 的单个脚本仍然会锁定一个大请求,它只会允许您一次排队多个。

最理想的情况是,我会用一种本机支持多线程的语言来编写它,这样你就可以在不求助于黑客的情况下同时发生事情,但可以理解的是,这并不总是一种选择。

于 2011-10-21T05:21:06.227 回答