PHP:如何以非阻塞方式调用函数?

PHP:如何以非阻塞方式调用函数?,php,concurrency,Php,Concurrency,我看到了关于这个问题的另外几个问题,但没有一个明确的答案 我有一个PHP文件(必须是PHP,不能是cron或其他东西)从CLI运行,我必须使用不同的参数多次调用同一个函数: doWork($param1); doWork($param2); doWork($param2); function doWork($data) { //do stuff, write result to db } 每次调用都会发出HTTPs请求并解析响应。此操作最多需要一分钟才能完成。我必须防止“护航效应”:每次

我看到了关于这个问题的另外几个问题,但没有一个明确的答案

我有一个PHP文件(必须是PHP,不能是cron或其他东西)从CLI运行,我必须使用不同的参数多次调用同一个函数:

doWork($param1);

doWork($param2);

doWork($param2);

function doWork($data)
{
//do stuff, write result to db
}
每次调用都会发出HTTPs请求并解析响应。此操作最多需要一分钟才能完成。我必须防止“护航效应”:每次调用都必须在不等待前一次调用完成的情况下执行

由于服务器限制,PECL pthread不是一个选项

有什么想法吗?

添加
“>/dev/null 2>/dev/null&”


你可以要求更多

据我所知,你不能做你正在寻找的事情

与使用参数调用函数不同,您必须以非阻塞方式调用另一个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
}

.

我本来希望能少点麻烦,但如果没有其他问题,我就走这条路,谢谢!
if(is_array($_SERVER['argv'])) $param = $_SERVER['argv'][1];
doWork($param);
function doWork($data)
{
    //do stuff, write result to db
}