Ubuntu环境下如何在PHP中异步后台运行Python脚本?
在Ubuntu下让PHP异步调用Python脚本的正确姿势
我之前也帮人排查过类似的问题,你遇到的核心问题是:虽然加了&和nohup,但PHP还是会阻塞等待Python脚本执行完毕,这是因为没有正确处理子进程的输出流。
你尝试过的代码(无法实现异步)
shell_exec("nohup python2.7 /var/www/html/pythonproject/python.py /var/www/html/file 100525 &"); exec("nohup /usr/bin/python2.7 /var/www/html/pythonproject/python.py /var/www/html/file 100525 &");
可行的异步实现代码
下面这段代码可以让PHP立即返回,Python脚本在后台独立运行:
exec("/usr/bin/python2.7 /var/www/html/pythonproject/python.py /var/www/html/file 100525 > /dev/null 2>/dev/null &")
原理说明
> /dev/null:把Python脚本的标准输出(stdout)重定向到空设备,避免PHP等待输出流关闭2>/dev/null:把标准错误(stderr)也重定向到空设备,防止错误输出导致的阻塞&:让Python进程在后台运行
这样处理后,PHP就不会再等待脚本执行完成,直接继续执行后续代码了。
内容的提问来源于stack exchange,提问作者Sammu Sundar
相关产品推荐
相关产品推荐

