在PHP中并行执行函数
发布时间:2020-12-13 14:06:20 所属栏目:PHP教程 来源:网络整理
导读:PHP可以调用一个函数,不要等待它返回?所以这样的东西: function callback($pause,$arg) { sleep($pause); echo $arg,"n";}header('Content-Type: text/plain');fast_call_user_func_array('callback',array(3,'three'));fast_call_user_func_array('callb
PHP可以调用一个函数,不要等待它返回?所以这样的东西:
function callback($pause,$arg) { sleep($pause); echo $arg,"n"; } header('Content-Type: text/plain'); fast_call_user_func_array('callback',array(3,'three')); fast_call_user_func_array('callback',array(2,'two')); fast_call_user_func_array('callback',array(1,'one')); 将输出 one (after 1 second) two (after 2 seconds) three (after 3 seconds) 而不是 three (after 3 seconds) two (after 3 + 2 = 5 seconds) one (after 3 + 2 + 1 = 6 seconds) 主脚本旨在作为一个永久的进程(TCP服务器)运行. callback()函数将从客户端接收数据,执行外部PHP脚本,然后根据传递给callback()的其他参数执行某些操作.问题是主脚本不能等待外部PHP脚本完成.外部脚本的结果很重要,所以exec(‘php -f file.php&’)不是一个选项. 编辑: 感谢大家!
在Unix平台上,您可以启用PCNTL功能,并使用
pcntl_fork 分支进程并在子进程中运行作业.
就像是: function fast_call_user_func_array($func,$args) { if (pcntl_fork() == 0) { call_user_func_array($func,$args); } } 一旦你打电话给pcntl_fork,两个进程将从同一个位置执行你的代码.父进程将获得从pcntl_fork返回的PID,而子进程将获得0.(如果有一个错误,父进程将返回-1,这在生产代码中值得检查). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |