Как выйти из функции, если это занимает больше ожидаемого времени - PullRequest
0 голосов
/ 17 апреля 2011

Я должен вызвать эту функцию

$rep_id=$this->getit($domain);

но какой-то домен занимает 2/3 минуты. Я хочу пойти дальше, если это займет много времени. Я установил set_time_limit (3000); в начале страницы php

Ответы [ 2 ]

0 голосов
/ 17 апреля 2011

Предполагая, что вызов getit () находится в основном потоке (то есть не создается в новом потоке), его выполнение, скорее всего, заблокирует остальную часть сценария. Однако, если getit () самоосознает свой собственный таймер, вы можете создать его для выгрузки, если этот предел выполнения достигнут, возвращая код ошибки, указывающий на проблему. Если вы решили приступить к этим изменениям, рассмотрите возможность добавления дополнительного параметра, чтобы указать ограничение по времени для вызова.

0 голосов
/ 17 апреля 2011

set_time_limit () не будет работать, так как это устанавливает время для скрипта в целом. Я не уверен, если это действительно возможно с php, но вы могли бы справиться с разветвлением. Я подумываю о том, чтобы запустить таймер (используя time () для метки времени) и выполнить цикл, пока он не достигнет X time, в то же время разветвляя ваш $ this-> geitit () как дочерний процесс. Затем, когда таймер закончится, убейте дочерний процесс. Может работать, но не знаю.

Полагаю, возможно, альтернатива состоит в том, чтобы сделать его отдельным сценарием с заданным временем ожидания, используя эту set_time_limit (), а затем вызвать его из основного сценария, используя exec ()

...