2015-06-10 2 views
0

У меня есть довольно простой код рабочего, возможно, будет глупая ошибка.Функция gearman в рабочем состоянии остается неопределенной

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 

любые намеки? пример очень похож на пример python на http://gearman.org/examples/reverse/. просто положить в классовой структуре

Улучшен код:

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() 

ответ

1

Вам нужно изменить callBing к self.callBing и это могло бы быть лучше перенести регистрацию на первую строку методы выполнения, а не метод __init__ ,

Кулак, потому что callBing является ссылка на отсутствует глобального, а self.callBing является ссылкой на метод классов. Вторая причина заключается в том, что, возможно, вы могли бы позвонить до self.callBing до . Завершено, что закончил, что было бы плохими новостями.

+0

Я обновил код, не могли бы вы пересмотреть – nlper

+0

Обновленный код выглядит лучше, чем отсутствие 'docstrings'. Реальный вопрос: теперь он делает то, что вы ожидали от него? –

+0

Да, он делает так, как ожидалось – nlper

Смежные вопросы