我在python中使用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
)。失败的状态返回到gearman客户端。但是在齿轮工人上没有显示错误。它正在工作并接收新的连接
为什么会这样?
答案 0 :(得分:0)
在Gearman协议中失败的作业没有结果。
您可以覆盖worker上的“on_job_exception”方法来执行您想要的任何日志记录。这是默认设置,因此您只能使用false
获得失败的作业def on_job_exception(self, current_job, exc_info):
self.send_job_failure(current_job)
return False
或者您可以覆盖它并使用完整代码和客户端跳过self.send_job_failure并查看结果并确定结果是否有错误代码。但是,所有工作都不会失败。
版本1.2
在1.2树中BTW你可以这样做:
gearmand --exceptions
以便在服务器上启用异常。这节省了客户端执行此操作的需要。