如何防止一个函数执行时间过长呢?在PHP里可以用pcntl时钟信号+异常来实现。
代码如下:
root@192.168.137.158:~/php/swoole_study_codes# php timeout.php
PHP Exception: in /root/php/swoole_study_codes/timeout.php on line 19
PHP Stack trace:
PHP 1. {main}() /root/php/swoole_study_codes/timeout.php:0
PHP 2. a() /root/php/swoole_study_codes/timeout.php:26
PHP 3. sig() /root/php/swoole_study_codes/timeout.php:5
timeout
Stop
a finishi
Stop
原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数会抛出一个异常,被外层代码捕获。这样就跳出了原来函数的执行,接着执行下面的代码。如果函数在规定的时间内,时钟信号不会触发,在函数结束后清除时钟信号,不会有异常抛出。
来源自rango兄弟的博客:http://swoole.sinaapp.com/archives/64
代码如下:
root@192.168.137.158:~/php/swoole_study_codes# php timeout.php
PHP Exception: in /root/php/swoole_study_codes/timeout.php on line 19
PHP Stack trace:
PHP 1. {main}() /root/php/swoole_study_codes/timeout.php:0
PHP 2. a() /root/php/swoole_study_codes/timeout.php:26
PHP 3. sig() /root/php/swoole_study_codes/timeout.php:5
timeout
Stop
a finishi
Stop
原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数会抛出一个异常,被外层代码捕获。这样就跳出了原来函数的执行,接着执行下面的代码。如果函数在规定的时间内,时钟信号不会触发,在函数结束后清除时钟信号,不会有异常抛出。
来源自rango兄弟的博客:http://swoole.sinaapp.com/archives/64
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/5955/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2013-1-20 17:04
评论列表