请求之间的 PHP cURL multi_exec 延迟

标签 php multithreading curl delay curl-multi

如果我运行标准的 cURL_multi_exec 函数(下面的示例),我会立即获得所有请求的 cURL 句柄。我想在每个请求之间延迟 100 毫秒,有没有办法做到这一点? (在 Google 和 StackOverflow 搜索中找不到任何内容)

我在 curl_multi_exec() 之前尝试过 usleep(),这会减慢脚本速度但不会推迟每个请求。

// array of curl handles & results
$curlies = array();
$result = array();
$mh = curl_multi_init();

// setup curl requests
for ($id = 0; $id <= 10; $id += 1) {
    $curlies[$id] = curl_init();
    curl_setopt($curlies[$id], CURLOPT_URL,            "http://google.com");
    curl_setopt($curlies[$id], CURLOPT_HEADER,         0);
    curl_setopt($curlies[$id], CURLOPT_RETURNTRANSFER, 1);
    curl_multi_add_handle($mh, $curlies[$id]);
}

// execute the handles
$running = null;
do {
    curl_multi_exec($mh, $running);
} while($running > 0);

// get content and remove handles
foreach($curlies as $id => $c) {
    $result[$id] = curl_multi_getcontent($c);
    curl_multi_remove_handle($mh, $c);
}

// all done
curl_multi_close($mh);

我整天都在为此工作,非常感谢任何帮助!谢谢。

编辑:还有其他非 cUrl 方法吗?这也能回答我的问题。

最佳答案

是的,这是可能的。如果您使用 ParallelCurl library ,您可以更轻松地使用 usleep() 添加 100 毫秒的延迟,因为您可以单独请求添加到下载队列。

for ($urls as $url) {
    $pcurl->startRequest($url);
    usleep(100000);
}

关于请求之间的 PHP cURL multi_exec 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6987404/

相关文章:

php - 为每个隐藏值实现唯一的 id 名称

javascript - 根据包含其他两个输入之和的一个字段添加动态输入

php - 如何在 codeigniter 中开始一个新的网站项目?

multithreading - 解释 BEA weblogic 线程转储 - 有用的文档和/或工具?

curl - 从命令行下载/导出公共(public) Google 电子表格作为 TSV?

php - Array Unique with Associative Array - 删除重复项

java - Java 同步块(synchronized block)/代码上的线程访问

c# - 使用 C# 在 Windows 8 上获取当前线程 ID

php - 如何使用(发送网格)php api 在列表中添加联系人

curl - 将 Org 中的 GitHub 团队添加到 REPO