2016-03-03 34 views
-1

我有一些錯誤,同時使用Python中的Gearman:爲什麼蟒蛇的Gearman工人沒有顯示錯誤

import gearman 

gm_worker = gearman.GearmanWorker(['localhost:4730']) 

def task_listener_reverse(gearman_worker, gearman_job): 
    print d 
    print 'Reversing string: ' + gearman_job.data 
    return gearman_job.data[::-1] 

# gm_worker.set_client_id is optional 
gm_worker.set_client_id('python-worker') 
gm_worker.register_task('reverse', task_listener_reverse) 

# Enter our work loop and call gm_worker.after_poll() after each time we timeout/see socket activity 
gm_worker.work() 

下面是錯誤print d,但它沒有顯示任何錯誤(如NameError: name 'd' is not defined)。失敗狀態返回到齒輪人客戶端。但是在傳動員工人中沒有顯示錯誤。它正在工作並接收新的連接

爲什麼會發生?

回答

0

在Gearman協議失敗的作業沒有結果。

您可以覆蓋worker上的「on_job_exception」方法來執行任何您想要的日誌記錄。這是默認的,所以你只能得到一個失敗的作業假

def on_job_exception(self, current_job, exc_info): 
    self.send_job_failure(current_job) 
    return False 

或者你也可以覆蓋它,並跳過具有完整代碼的self.send_job_failure和客戶端,並查看結果,並決定如果結果有錯誤碼。但是,所有的工作永遠不會失敗。

1.2版

BTW在1.2樹,你可以這樣做:

gearmand --exceptions

這樣的例外在服務器上啓用。這可以節省客戶做這件事的需要。