Gearman php-workers:根据请求fork进程

时间:2013-06-28 11:41:41

标签: php gearman supervisord

我有一个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?还是有现成的解决方案?

1 个答案:

答案 0 :(得分:1)

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

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

那就是说,这是一个用例的模式:

  • 定义一个标志文件并在启动时触摸它(这很重要:文件现有意味着工人正在运行)
  • 一个客户,想要消耗你的工作人员,unlink() s,保持返回值
  • 如果此返回值为true,则此线程是取消链接文件的线程,并且已经获得了对工作者创建的锁定:所以他通过shell_exec()创建了一个工作者 - 小心地启动它背景(即/path/to/php php -q /path/to/my_func.php &
  • 客户等待工作人员可用并提交作业
  • 工作人员不使用正常的while($worker->work());循环,而只使用一次调用,然后写入标记文件并结束。