【问题标题】:Cron and PHP 5.2 - Memory Issues processing JSONCron 和 PHP 5.2 - 处理 JSON 的内存问题
【发布时间】:2012-11-04 15:39:10
【问题描述】:

我的项目的每个用户都有一个 Cron,每 5 分钟执行一个 php 脚本,执行大约需要 4 分钟。我找不到“更轻松”的方法!

但现在我面临内存问题,因为有时文件会在同一个“时间空间”中执行,这会使我的虚拟内存增加!

我试图让我的循环更轻,但它们仍然为每个文件消耗 25MB!

如果你们有任何好的解决方案,我将不胜感激:)。在这里

for($x = 0; $x <= 14; $x++)
{

    $r = rand(0,7);
    $jsonData = $this->getsomejson($value[$r]);
    if ($this->meta->code == 400){continue;}

    foreach ((array)$jsonData->data as $key=>$value)
    {
        $result = doSomething($value->id,$Token[$x]);
        if ($result==200){$L++;}
        $i++;
        unset($value);
    }      

    unset($r,$jsonData,$value);
}

【问题讨论】:

    标签: php json memory loops cron


    【解决方案1】:

    我们可以在cron作业开始时设置一个信号或标记,然后我们检查这个信号或标记以查看是否有作业在运行,如果是,则停止启动新作业,否则,启动它。

    我们可以将此信号或标记存储在文件或数据库表中

    $signal = get_it_from_file(); 
    if ($signal < max) {
      //start to do our job
       ..............
       $signal = $signal+1;
       store_it_to_file();
    } else {
          //skip it
    }
    

    我们可以调整 max 来控制同时运行多少作业

    【讨论】:

      【解决方案2】:

      因为我不知道“getsomejson”和“doSomething”背后的代码是什么,所以很难说这里的瓶颈是什么。

      如果这是 2 个非常简单的函数,我猜问题是您必须加载一个巨大的 json 文件,并且您可能会尝试压缩该文件。

      否则你应该提供更多关于函数“getsomejson”和“doSomething”的细节,看看是否可以优化它们

      【讨论】:

      • 感谢您的回复伙伴!我的函数从 Instagram API 中提取图片,它获取 JSON 文件,并对 JSON 文件中包含的每个 DATA 项执行操作
      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多