параллелизм — PHP: как я могу вызвать функцию неблокирующим способом?

Я видел пару других вопросов по этому вопросу, но не получил четкого ответа.

У меня есть файл PHP (должен быть PHP, не может cron или другие вещи), запущенный из CLI, где я должен вызывать одну и ту же функцию несколько раз с разными аргументами:

doWork($param1);

doWork($param2);

doWork($param2);

function doWork($data)
{
//do stuff, write result to db
}

Каждый вызов отправляет HTTP-запросы и анализирует ответ. Операция может занять до минуты до завершения. Я должен предотвратить «эффект конвоя»: каждый вызов должен выполняться, не дожидаясь завершения предыдущего.

PECL pthread не подходит из-за ограничений сервера.

Есть идеи?

2

Решение

Насколько я знаю, вы не можете делать то, что вы ищете.

Вместо того, чтобы вызывать функцию с ее параметрами, вы должны вызывать другой сценарий 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
}

Больше информации об argv.

1

Другие решения

Как насчет добавления "> /dev/null 2>/dev/null &"

exec('php myFile.php  > /dev/null 2>/dev/null &');

Вы можете проверить документацию для большего

1

По вопросам рекламы [email protected]