我用exec()
功能触发新的PHP的线程(而且不需要这些PHP脚本的输出),像EXEC替代触发多个新的PHP线程共享主机
for ($i=0;$i<5;$i++) {
exec('/usr/bin/php script' . $i . '.php > /dev/null 2>&1 &');
sleep(1);
}
我d想询问是否有其他本地PHP功能可以完成同样的工作,因为我的虚拟主机提供商不启用exec
,我不愿意切换到另一个。
非常感谢。
我用exec()
功能触发新的PHP的线程(而且不需要这些PHP脚本的输出),像EXEC替代触发多个新的PHP线程共享主机
for ($i=0;$i<5;$i++) {
exec('/usr/bin/php script' . $i . '.php > /dev/null 2>&1 &');
sleep(1);
}
我d想询问是否有其他本地PHP功能可以完成同样的工作,因为我的虚拟主机提供商不启用exec
,我不愿意切换到另一个。
非常感谢。
通常这些任务是通过http服务器内部的请求产生的。只需使用phps [virtual()][1]
或[curl extension][2]
即可完成更复杂的任务。
然而,您仅限于phps web配置,因此请注意诸如执行超时等限制。我怀疑是否有办法在网络托管系统上产生真正的流程。这将是一个可怕的安全线程!
通常这些任务也被委托给某种作业调度程序实现,该作业调度程序实现由cron
,poor mans cron
或基于ajax
的触发器触发。这意味着您必须为等待处理的作业实施调度程序。但它也带来了单独工作的良好分离。
'exec()'不会“触发php线程”。它开始完全独立的PHP解释器流程,这是一项非常昂贵的任务。 – arkascha
其实我并不熟悉正确的术语,但该代码服务于我的目的(例如,script1.php,script2.php ...是脚本,需要运行直到完成,但我不需要显示输出,这些脚本中的任务也需要时间(几秒钟),但不是CPU饥饿) – aye
请不要尝试多线程编程。 [主题是邪恶的](http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf),虽然是必要的罪恶。 PHP不是(也不应该是)用于并发计算。这不仅仅是工作的正确工具。你可以让系统生成一个子进程,是的,你可以选择_not_来等待孩子的回应,但是回过头来问问自己:_“没有另一种方式吗?我真的需要线程/子进程?“_通常,答案是否定的... –