首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >curl php在共享主机上每分钟都要抓取cron作业。

curl php在共享主机上每分钟都要抓取cron作业。
EN

Stack Overflow用户
提问于 2013-02-12 16:31:45
回答 2查看 1.6K关注 0票数 2

我有个棘手的问题。我在一个基本的共享主机上。我用curl和php创建了一个很好的擦拭脚本。

因为使用Curl的多线程并不是真正的多线程,而且即使是我使用过的最好的curl多线程脚本也会加快1,5-2的抓取速度,因此我得出的结论是,我需要在我的php脚本上运行大量的cron任务(比如每分钟50项),该脚本与mysql表交互,以便为我的客户提供快速的web抓取。

我的问题是,当大量cron任务同时运行时,我会得到一个"Mysql服务器已经消失了“。如果我减少了cron任务的数量,它就会继续工作,但是总是很慢。

我还尝试了一种基于浏览器的解决方案,每次完成后都重新加载脚本。它工作得更好,但问题总是一样:当我决定同时运行10次脚本时,它开始重载mysql服务器或web服务器(我不知道)

为了解决这个问题,我已经获得了一个mysql服务器,在这里我可以设置my.cnf ...but --问题大致保持不变。

========= 我的问题是:问题从何而来?桌子的尺寸?我需要一个100 NEED的专用服务器。如果是的话,你确定它能解决问题吗?它有多快?通过知道我希望提取速度达到每秒大约100个URL (此时,它会达到每15秒一个URL,非常慢.)

  • 剧本上只有一段时间。它加载所有的页面和预览匹配或多姆数据,并插入到mysql数据库。
  • 我提取了大量的数据,这就是为什么当我删除一个表时,它会快速地包含数百万个entries...but,也许它的速度要快一点,但问题总是一样:不可能并行地大规模运行任务以加快进程。
  • 我不认为问题来自我的剧本。在所有的情况下,即使是完美的优化,我也不会像我想的那么快。
  • 我通过使用脚本与but代理进行抓取,但差异非常显著.

我的结论是,我需要使用一台专用服务器,但如果我不确定它是否能解决问题,我不想每月投资100美元,而且我将能够在mysql db上运行大量的cron任务/调用,而不会出现问题。

EN

回答 2

Stack Overflow用户

发布于 2018-03-11 14:50:11

我必须看到代码,但本质上它看起来确实是受主机的限制。

是否有可能每隔一两分钟运行一次cron,但在脚本中的一个SQL连接上进行批处理?

本质上,我们的目标是打开sql套接字一次,并在连接上运行多个URL刮取,而不是当前的每个mysql连接刮刮,希望避免主机的速度限制。

伪码:

代码语言:javascript
复制
<?php
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
$sql = "SELECT url FROM urls_table WHERE scraped='0' LIMIT 100";
$result = mysqli_query($link, $sql);
while($row = mysqli_fetch_array($result, MYSQLI_NUM)){
    $url_to_scrape = $row[0];
    //TODO: your scrape code goes here
}
//Only AFTER you've scraped multiple URLs do we close the connection
//this will drastically reduce the number of SQL connects and should help
mysqli_close($link);
?>
票数 0
EN

Stack Overflow用户

发布于 2018-02-24 20:59:34

太简单了..。不要在同一个URL上发送多线程。可能是许多不同的URL。但要尊重一定的超时时间。你可以这样做:

代码语言:javascript
复制
sleep($random);  $random = random(15, 35) ; // in seconds
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14837210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档