search

Home  >  Q&A  >  body text

超时 - PHP 是否可以限制函数执行时间?

PHP 是否可以限制函数执行时间,以使下列伪代码的功能得以实现?

foreach ($jobs as $job) {
    try {
        run($job);
    } catch (TimeoutException $e) {
        printf("Timeout: %s\n", $e->getMessage());
        continue;
    }
}

function run($job) {
    // ssh, HTTP request, Connect DB etc.
}
PHP中文网PHP中文网2840 days ago318

reply all(3)I'll reply

  • 大家讲道理

    大家讲道理2017-04-10 15:06:38

    // 设置闹钟信号处理,抛异常退出循环
    declare(ticks = 1);
    pcntl_signal(SIGALRM, function(){throw new Exception('process_timeout');});
    
    // 设置闹钟,5秒超时
    pcntl_alarm(5);
    
    $jobs = array_fill(0, 1000, 'job');
    foreach ($jobs as $job) {
        try {
            run($job);
        } catch (Exception $e) {
            printf("Timeout: %s\n", $e->getMessage());
            exit;
        }
    }
    
    function run($job) {
        // ssh, HTTP request, Connect DB etc.
        sleep(1);
    }
    

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 15:06:38

    推荐你一个框架swooole
    看你代码就是要处理一个花费时间比较长的任务
    swoole里的task,提交过去一个任务,立即返回,任务在后台自动运行,不用关注运行时间
    设置了 set_time_limit() 会使任务无法完成

    reply
    0
  • PHPz

    PHPz2017-04-10 15:06:38

    set_time_limit()
    

    这一个

    reply
    0
  • Cancelreply