2016-03-03 54 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

这样的例外在服务器上启用。这可以节省客户做这件事的需要。