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

标签 php concurrency

我看到了有关该问题的其他几个问题,但没有明确的答案。

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

doWork($param1);

doWork($param2);

doWork($param2);

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

每次调用都会发出 HTTPs 请求并解析响应。该操作最多可能需要一分钟才能完成。我必须防止“护航效应”:每个调用都必须执行,而无需等待前一个调用完成。

由于服务器限制,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
}

More information about argv .

关于PHP:如何以非阻塞方式调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28024043/

相关文章:

php - 在php中无需创建数组即可访问对象

python - 文件下载后立即处理

ASP.NET 开发服务器并发处理不起作用

php - 如何在 PHP 和 JavaScript 之间进行通信

php - 如何通过 AJAX 请求发布包含特殊字符(例如 '&' 特别)的长字符串?

php - jQuery 长轮询(使用 PHP 服务器端)

php - 使用推文按钮 - 链接根本不会出现在推文文本中

java - 并发数据结构的使用示例?

memory - 共享内存与消息传递如何处理大型数据结构?

concurrency - 限制 ansible playbook 任务并发