【问题标题】:Yii background process issueYii后台进程问题
【发布时间】:2014-12-15 18:23:35
【问题描述】:

我正在使用 Yii 扩展 runactions 运行后台进程,我正在尝试将批量记录(6000)更新为后台进程,但仅在数据库中更新了大约 2500 条记录! 我在日志中没有收到任何错误,它与间隔或超时问题有关?

我尝试更改运行操作的间隔但没有效果,谁能帮我解决这个问题?

【问题讨论】:

  • 我之前没有使用过 runactions,但是为了帮助对话,我们可以假设您使用的是 ERunActions::runBackground(),这是第 4 次您粘贴的链接中的用例?另外,这 2500 条记录是否更新了 6000 条中的前 2500 条?
  • 是的,它的前 2500 条记录
  • 这可能与您的 PHP 脚本超时有关。 php.net/manual/en/function.set-time-limit.php

标签: yii background-process yii-extensions


【解决方案1】:

此扩展程序在 http 级别执行后台作业,因此您必须管理脚本 max-execution-time,我认为此扩展程序不会处理它。如果命令行执行 max-execution-time 不适用。

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

通常对于较长的过程,而不是禁用 tiemout,我会在循环中增加它,如下所示:

while ($i <= 10) {
    my_complex_update_query();
    echo "Timeout is : " . ini_get('max_execution_time') . " sec.<br>";
    set_time_limit(ini_get('max_execution_time') + 1);    
    echo "NEW Timeout is : " . ini_get('max_execution_time') . " sec.<br>";
    $i++;
}

这会增加每个周期增加 1 秒的时间限制,显然您必须根据需要调整它,例如每 10 个周期增加 1 秒。 这样,如果脚本由于某种原因卡住了,它无论如何都会超时并且不会挂在内存中。

请考虑外部调用(如数据库查询、系统调用的执行...)不计入脚本执行时间。 因此,如果您的脚本执行时间为 5 秒,则执行一个需要 2 分钟执行的查询,当脚本按照以下指令执行时,执行时间仍然是 5 秒,而不是 2 分钟 + 5 秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多