Я использую скрипт для открытия (proc_open
) от 5 до 50 процессов один за другим. Каждый из них делает cURL и отправляет результаты в БД. Я не хочу ждать результатов их выполнения, я просто хочу, чтобы они запускались, когда основной сценарий выполняется и после него. я использую set_time_limit(10);
в каждом файле процесса.
proc_close
ожидает завершения процесса и возвращает код выхода.
В интернете я обнаружил, что php автоматически закрывает все каналы и каждый процесс, когда основной файл полностью выполняется без вызова proc_close
а также fclose
но не нашел ни одного документально подтвержденного доказательства.
Таким образом, вопрос: необходимо ли закрывать каналы и процессы proc_close?
И может ли это быть проблемой, если 100-200 пользователей одновременно запускают этот скрипт и он открывает от 5 до 50 процессов для каждого пользователя и proc_close
а также fclose
не называются.
Если у вас есть более элегантный способ решения этой задачи, пожалуйста, скажите мне, но прежде всего мне нужно получить информацию о моем текущем подходе. Большое спасибо.
Код, который я использую для вызова каждого процесса, (часть функции):
$params = addcslashes(serialize($params), '"');
$command = $this->phpPath.' -q '.$filename.' --params "'.$params.'"';
++$this->lastId;
$this->handles[$this->lastId] = proc_open($command, $this->descriptorSpec, $pipes);
$this->streams[$this->lastId] = $pipes[1];
$this->pipes[$this->lastId] = $pipes;
Задача ещё не решена.
Других решений пока нет …