我正在建立一个执行以下操作的cron作业:
1.从数据库中获取记录
2.为每条记录触发对API的curl请求。 (有些请求很快,有些请求上传大图片或视频)
3.如果请求不成功,请创建一个参数略有不同的新请求(仍基于记录)并再次发送。这可能会发生几次
4.成功请求时,请执行一些数据库选择/插入(基于导致发送此请求的原始记录)。
发送请求应该并行发生,因为有些需要几分钟(大型上传),有些非常快。
最合适的做法是 - 拥有一个从DB获取记录的主脚本,并为每个记录创建一个进程来处理调用API并解析响应?或者使用curl_multi从同一个脚本同时发送多个请求,并在返回时解析每个请求?
如果使用多个流程,最好的方法是什么 - PCNTRL,popen等? 如果使用curl_multi,我怎么知道哪个DB记录对应哪个返回请求?
编辑:如果使用curl multi,我可能会使用这种技术:http://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/
因此,在开始处理响应之前,它不会等待所有请求完成。
谢谢!
答案 0 :(得分:1)
处理大型数据集后,我遇到了类似的问题。
对我来说最简单的答案是制作 4个单独的脚本,每个脚本都写入所涉及的db列的特定第四个,在我的情况下进行处理或在你的案件卷曲请求。这可以防止其中一个进程的大请求锁定其他进程。
相比之下,使用curl_multi的单个脚本仍会锁定大型请求,它只允许您一次排队多个。
最好我会用一种本地支持多线程的语言来编写它,这样你就可以在不诉诸黑客的情况下同时发生事情,但这并不总是一种选择。
答案 1 :(得分:1)
最后,我使用PCNTRL进行了多处理(限制了concurent进程的数量)。在我看来,curl_multi不会扩展成千上万的请求。