-1

我有一个 gearman 服务器,在后台有一个 php worker-script(由 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?还是有现成的解决方案?

4

1 回答 1

1

首先,我认为你不应该担心后台工作者:它空闲的开销接近于零,但它的启动和停止的开销却不是。

您还将遇到很多锁定问题,以避免并发客户端请求启动多个

也就是说,这是您的用例的模式:

  • 定义一个标志文件并在启动时触摸它(这很重要:文件存在意味着工作人员没有运行)
  • 一个想要消耗你的工作人员的客户端,unlink()保持返回值
  • 如果这个返回值为真,那么这个线程就是取消链接文件的线程,并且在某种程度上获得了一个工人创建的锁:所以他通过创建一个工人shell_exec()- 小心在后台启动它(即/path/to/php php -q /path/to/my_func.php &
  • 客户端等待工作人员可用并提交作业
  • 工作人员不使用正常while($worker->work());循环,而是单次调用,然后写入标志文件并结束。
于 2013-06-28T12:02:05.847 回答