使用PHP / Net_Gearman的Gearman,执行从其他工作人员调用的工作的工作人员变得没有响应

时间:2011-11-12 21:17:38

标签: php gearman worker

我正在使用gearman在多个工作服务器上分配长时间运行的任务。对于我的一个工作任务,我尝试调用另一个后台作业。后台作业由另一个工作人员成功执行...但该工作进程不响应之后添加到gearman的任何新作业。

任何人都知道可能会发生什么?这是齿轮手的特征吗?

修改

此外,如果我重新启动我的工作人员,他们会重复其他工作人员排队的任务。 Gearman似乎没有意识到工作已经完成。

编辑2:

尝试:

var_dump($this->conn);
var_dump($this->handle);

从我的其他工作人员调用的worker函数中。这是我收到的输出:

NULL
string(0) ""

编辑3:

我想出了一种解决这个问题的hackey方法。以下是相关的代码片段。我正在为我的项目使用codeigniter,我的gearman服务器作为一个数组存储。如果连接为空,我只是在我的作业代码中测试,如果是,则使用随机的gearman服务器重新建立它。我确信这很糟糕,所以如果有人有一些改进的见解,我会非常感激。

class Net_Gearman_Job_notification_vc_friends_new_user extends Net_Gearman_Job_Common{

private $CI;

function __construct(){
    $this->CI =& get_instance();

    if(!$this->conn){

        $gearman = $this->CI->config->item('gearman');
        $servers = $gearman['servers'];
        $key = array_rand($servers);            
        $this->conn = Net_Gearman_Connection::connect($servers[$key]);

    }
}

1 个答案:

答案 0 :(得分:0)

想出来!实际上非常愚蠢,忘了打电话 父:: __构建体();在我的构造函数中... oops。