Я видел пару других вопросов по этому вопросу, но не получил четкого ответа.
У меня есть файл PHP (должен быть PHP, не может cron или другие вещи), запущенный из CLI, где я должен вызывать одну и ту же функцию несколько раз с разными аргументами:
doWork($param1);
doWork($param2);
doWork($param2);
function doWork($data)
{
//do stuff, write result to db
}
Каждый вызов отправляет HTTP-запросы и анализирует ответ. Операция может занять до минуты до завершения. Я должен предотвратить «эффект конвоя»: каждый вызов должен выполняться, не дожидаясь завершения предыдущего.
PECL pthread не подходит из-за ограничений сервера.
Есть идеи?
Насколько я знаю, вы не можете делать то, что вы ищете.
Вместо того, чтобы вызывать функцию с ее параметрами, вы должны вызывать другой сценарий cli php неблокирующим образом и помещать свою функцию в этот сценарий.
Это ваш главный скрипт:
callDoWork($param1);
callDoWork($param2);
callDoWork($param3);
function callDoWork($param){
$cmd = 'start "" /b php doWork.php '.$param;
//if $param contains spaces or other special caracters for the command line,
// you have to escape them.
pclose(popen($cmd);
}
doWork.php будет выглядеть так:
if(is_array($_SERVER['argv'])) $param = $_SERVER['argv'][1];
doWork($param);
function doWork($data)
{
//do stuff, write result to db
}
Как насчет добавления "> /dev/null 2>/dev/null &"
exec('php myFile.php > /dev/null 2>/dev/null &');
Вы можете проверить документацию для большего