worker 中的 gearman 函数仍未定义
gearman function in worker remains undefined
我有非常简单的工人代码,可能会犯一些愚蠢的错误。
class BingWorker(object):
def __init__(self):
self.gm_worker = gearman.GearmanWorker(['localhost:4730'])
completed_job_request = self.gm_worker.register_task('bingmedia', callBing)
def callBing(self, gearman_worker, gearman_job):
print "In worker ", gearman_job.data
return "Kools"
def run(self):
self.gm_worker.work()
if __name__ == '__main__':
BingWorker().run()
给予
Traceback (most recent call last):
File "worker.py", line 16, in <module>
BingWorker().run()
File "worker.py", line 6, in __init__
completed_job_request = self.gm_worker.register_task('bingmedia', callBing)
NameError: global name 'callBing' is not defined
有什么提示吗?示例与 http://gearman.org/examples/reverse/ 中的 python 示例非常相似。只需输入 class 结构
改进代码:
class BingWorker(object):
def __init__(self):
self.gm_worker = gearman.GearmanWorker(['localhost:4730'])
def callBing(self, gearman_worker, gearman_job):
print "In worker ", gearman_job.data
return "Kools"
def run(self):
completed_job_request = self.gm_worker.register_task('bingmedia', self.callBing)
self.gm_worker.work()
if __name__ == '__main__':
BingWorker().run()
您需要将 callBing
更改为 self.callBing
并且将注册移动到 运行 方法的第一行而不是 __init__
方法可能会更好.
拳头是因为 callBing
是对 missing 全局的引用,而 self.callBing
是对 类 方法的引用。第二个是因为你可能会在 init 完成之前接到 self.callBing
的电话,这将是个坏消息。
我有非常简单的工人代码,可能会犯一些愚蠢的错误。
class BingWorker(object):
def __init__(self):
self.gm_worker = gearman.GearmanWorker(['localhost:4730'])
completed_job_request = self.gm_worker.register_task('bingmedia', callBing)
def callBing(self, gearman_worker, gearman_job):
print "In worker ", gearman_job.data
return "Kools"
def run(self):
self.gm_worker.work()
if __name__ == '__main__':
BingWorker().run()
给予
Traceback (most recent call last):
File "worker.py", line 16, in <module>
BingWorker().run()
File "worker.py", line 6, in __init__
completed_job_request = self.gm_worker.register_task('bingmedia', callBing)
NameError: global name 'callBing' is not defined
有什么提示吗?示例与 http://gearman.org/examples/reverse/ 中的 python 示例非常相似。只需输入 class 结构
改进代码:
class BingWorker(object):
def __init__(self):
self.gm_worker = gearman.GearmanWorker(['localhost:4730'])
def callBing(self, gearman_worker, gearman_job):
print "In worker ", gearman_job.data
return "Kools"
def run(self):
completed_job_request = self.gm_worker.register_task('bingmedia', self.callBing)
self.gm_worker.work()
if __name__ == '__main__':
BingWorker().run()
您需要将 callBing
更改为 self.callBing
并且将注册移动到 运行 方法的第一行而不是 __init__
方法可能会更好.
拳头是因为 callBing
是对 missing 全局的引用,而 self.callBing
是对 类 方法的引用。第二个是因为你可能会在 init 完成之前接到 self.callBing
的电话,这将是个坏消息。