我有一个PHP脚本,每分钟从一个cron作业调用。此脚本从数据库获取一些信息,然后使用System函数调用另一个PHP脚本(传递一些参数)。
这意味着我可以从这个“主”脚本启动最多10个脚本。我想做的是我会调用脚本并继续执行主脚本,也就是说,不要等待系统调用完成然后调用下一个。
如何做到这一点?
答案 0 :(得分:3)
您可以一致使用proc_open()
,stream_select()
和stream_set_blocking()
来实现此类目标。
如果这听起来很模糊,我会在这里粘贴一大块代码,我在最近的项目中使用了类似的东西,但后来觉得它可能会阻碍而不是帮助!总而言之,代码的工作原理如下:
现在我变得模糊不清的原因是我们这里的多个实例都是由cronjob而不是PHP处理的。我试图做很多你正在谈论的事情,并且与pcntl_fork()
和朋友们相处得很好,但最后我遇到了一些问题(如果我记得至少有一个问题是PHP中的错误,并认为这种方法是一种更加坚如磐石的方式来实现同样的目标。 YMMV。
值得一看这些功能,你可以用它们实现很多。虽然我不认为PHP会成为首选的套接字编程语言...... :)
答案 1 :(得分:1)
如果您的操作系统支持,您可以使用pcntl_fork()功能来剥离父级不等待的子进程。但是要小心,很容易意外地创建太多的子进程,特别是如果它们花费的时间比预期的要长!
答案 2 :(得分:0)
我不确定PHP是否支持线程化。检查here。
答案 3 :(得分:0)
我认为答案与Asynchronous PHP calls已经提供的答案非常相似。
答案 4 :(得分:0)
它只是* NIX,但你可以使用PCNTL扩展来分叉你的脚本。
答案 5 :(得分:-1)
使用php的fork或thread版本。
答案 6 :(得分:-1)
您可以在后台运行它们:
system('php yourscript.php &');
您只需确保检查正在运行的进程总数。总而言之,不是一个超级优雅的解决方案。相反,你可以让一个脚本永远运行,我想的是这样的事情:
<?php
while(true) {
// do whatever needs to be done.
}
?>
虽然小心。众所周知,PHP不能用作守护进程。