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 是否可以限制函數執行時間,以使下列虛擬碼的功能得以實現?
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.}
// 設定鬧鐘訊號處理,拋異常退出迴圈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);}
推薦你一個架構swooole
看你代碼就是要處理一個花費時間比較長的任務
swoole裡的task,提交過去一個任務,立即返回,任務在後台自動運行,不用關注已耗用時間
設定了 set_time_limit() 會使任務無法完成
set_time_limit()
這一個