在PHP中的多线程处理

31 浏览
0 Comments

在PHP中的多线程处理

在一个Apache服务器上,我想将一个PHP脚本作为cron来运行,它会在后台启动一个PHP文件,启动后立即退出,并且不等待脚本完成,因为该脚本需要大约60分钟才能完成。如何实现这个功能?

0
0 Comments

Multi threading in PHP是一个常见的问题,它的出现原因是PHP本身并不直接支持多线程操作。然而,对于一些特定的问题,有时候需要使用多线程来提高程序的效率和性能。

为了解决这个问题,可以使用一个名为"pthreads"的PHP扩展,它可以在PHP中实现多线程操作。该扩展可以在GitHub上找到(https://github.com/krakjoe/pthreads)。

如果你有经验使用线程、互斥锁等相关知识,那么你应该能够使用pthreads扩展来解决你的问题。尽管pthreads扩展是一个年轻的项目,但很多人在Stack Overflow等平台上找到了解决其他问题的方法,因此它可能会对你有所帮助。

需要注意的是,pthreads扩展需要一定的权限才能安装,所以如果用户没有安装扩展的权限,那么这个解决方法可能对他们无效。

,虽然PHP本身不直接支持多线程操作,但可以使用pthreads扩展来实现多线程。这个解决方案可能不适用于所有问题,但对于一些需要提高程序效率和性能的场景下,它是一个不错的选择。

0
0 Comments

多线程在PHP中的问题是由于PHP本身的单线程执行特性所导致的。解决这个问题的方法是使用后台进程运行程序,并使用shell脚本从crontab运行该脚本。

在PHP中使用“&”符号将程序作为后台进程运行:

$ php -f file.php &

您可以编写一个shell脚本来实现这一点:

#!/bin/bash
php -f file.php &

然后从crontab运行该脚本。

0
0 Comments

PHP中没有线程的概念,但是如果在Unix/Linux系统上运行,可以轻松地执行并分离程序。

可能会有所帮助。让我们解释一下:

exec($command); 

执行/usr/bin/php '/path/to/your/php/to/execute.php':启动您的脚本,但是Apache将等待执行结束后再执行下一段代码。

> /dev/null

将标准输出(即您的echo、print等)重定向到虚拟文件(其中所有写入的输出都会丢失)。

2>&1

将错误输出重定向到标准输出,写入到相同的虚拟文件中,这样可以避免在apache2/error.log中生成日志。

&

是您的情况中最重要的部分:它将分离您的$command执行,因此exec()将立即释放您的PHP代码执行。

echo -n \$!

将分离执行的PID作为响应返回:它将被exec()返回,并使您能够使用它(例如,将此pid放入数据库,并在一段时间后终止它,以避免僵尸进程)。

这些参数的解释很好。

0