2011-11-12 73 views
1

我正在使用工具分配工具在多個工作服務器上分發長時間運行的任務。對於我的一個工作任務,我嘗試調用另一個後臺作業。後臺作業由另一名工作人員成功執行......但該工作進程並未響應之後添加到齒輪工的任何新作業。Gearman with PHP/Net_Gearman,執行從其他工作人員調用的作業的工作人員變得無響應

任何人都知道可能會發生什麼?這是齒輪工的特點嗎?

編輯:

另外,如果我重新啓動我的工人,他們重複被其他工人排隊的任務。 Gearman似乎沒有意識到這項工作已經完成。

編輯2:

嘗試:

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

在隨即從我的其他工人叫工人函數內。這是我收到的輸出:

NULL 
string(0) "" 

編輯3:

好吧,我想出瞭解決這個hackey方式。以下是相關的代碼片段。我爲我的項目使用codeigniter,我的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]); 

    } 
} 

回答

0

想通了!實際上很蠢,忘了叫 parent :: __ construct();在我的構造函數中...哎呀。