我正在使用'滚动'cURL多实现(如this SO post,基于this cURL code)。它可以同时处理数以千计的URL,最多可以使用100个请求,5个脚本作为守护进程运行(我知道,这应该用C或其他语言编写)。cURL多挂/忽略超时
下面是问题:在处理大约200,000个URL(跨越5个实例)之后,curl_multi_exec()
似乎中断了脚本的所有实例。我尝试关闭脚本,然后重新启动,并且发生同样的事情(不是在20万个URL之后,而是在重新启动之后),脚本挂起呼叫curl_multi_exec()
。
我把脚本置于'single'模式,在一次处理一个常规的cURL句柄,并且工作正常(但它不是我需要的速度)。我的日志记录导致我怀疑它可能已经遇到了一些缓慢/有问题的连接(因为每隔好几次似乎在URL上处理然后再挂起),但是这意味着我的CURLOPT_TIMEOUT
被单个句柄忽略。或者,也许这只是通过cURL运行许多请求而已。
有人听说过这样的事吗?
示例代码(同样基于this):
//some logging shows it hangs right here, only looping a time or two
//so the hang seems to be in the curl call
while(($execrun =
curl_multi_exec($master, $running)) == CURLM_CALL_MULTI_PERFORM);
//code to check for error or process whatever returned
我CURLOPT_TIMEOUT
设置为120
,但在curl_multi_exec()
终于返回一些数据的情况下,10分钟后等待的。
我有一堆测试/检查还没有做,但也许这可能会与某人打铃。
通过重新启动持续的挂起听起来像是远程服务器调节连接的问题。 – 2015-02-03 07:23:29
在处理之前使用'shuffle()'来获胜。 – 2017-01-16 22:49:05