我有一个gearman服务器,后台有一个php worker脚本(由supervisord管理)。该过程是异步的,因此主脚本不必等待。
问题是我在后台100%的时间都不需要工人,我只需要工作人员的工作。有没有办法避免后台PHP进程?例如一些脚本将监视传入的任务并执行适当的PHP文件?
我想到的解决方案是创建一个将执行php代码的shell scipt,类似于:
gearman -w -f 'my_func' ./my_func_exec.sh
其中my_func_exec.sh:
php -q my_func.php
但是我应该如何将工作量传递给my_func.php?还是有现成的解决方案?
答案 0 :(得分:1)
首先,我认为你不应该担心后台工作者:它的空闲开销接近于零,但启动和停止的开销不是。
您还会遇到很多锁定问题,以避免并发客户端请求启动多个
那就是说,这是一个用例的模式:
unlink()
s,保持返回值shell_exec()
创建了一个工作者 - 小心地启动它背景(即/path/to/php php -q /path/to/my_func.php &
)while($worker->work());
循环,而只使用一次调用,然后写入标记文件并结束。