매개 변수의 값에 따라 비동기 쿼리를 실행하거나 실행하지 싶습니다. 매개 변수가 True이면 쿼리가 실행되지 않아야합니다.@ tornado.gen.engine 함수에서 수익률없이 반환 하시겠습니까?
@tornado.gen.engine
def retrieveSomeData(self, feelingLucky, callback):
if feelingLucky:
return # <-- doesn't work, function never returns!
else:
response = yield tornado.gen.Task(queryFunction, param1....)
callback(response)
가 어떻게이 feelingLucky
가지 작업을 할 수 있습니다 :
내가 생각할 수있는 유일한 예외는 예외를 발생시키고 호출자에게 잡는 것입니다. 그러나 그것은 매우 추악합니다.
def _nullTask(self, callback):
callback()
@tornado.gen.engine
def retrieveSomeData(self, feelingLucky, callback):
if feelingLucky:
yield tornado.gen.Task(self._nullTask)
callback(None)
else:
response = yield tornado.gen.Task(queryFunction, param1....)
callback(response)
는 아마도 더 좋은 방법이하십시오 널 (null) 작업 같은 것이 ...이 있다면 또는
(파이썬 2.7, 토네이도 3.2)
감사합니다, 나는 당신이 코 루틴 및 엔진/작업을 혼합 할 수 있습니다 몰랐다 . 'return'은 여전히 작동하지 않지만, 이제 항복하지 않는 가지에서'gen.Return (raise)'을 할 수 있습니다. – egbokul
인수가없는 "return"은 "raise gen.Return()"과 같습니다. 파이썬 2와 파이썬 3에서는 약간의 혼동이있을 수 있습니다 : 파이썬 2에서는 생성자가 값을 반환 할 수 없지만 파이썬 2와 3에서는 맨손으로 "리턴"이 동일하게 작동합니다. 작동하지 않습니까? " –
잘 모르겠습니다 - 실행해야하는 곳에서 실행을 다시 시작하지 않으며 함수/생성기가 절대로 종료되지 않습니다 (호출 코드로 반환되지 않음). 내가 볼 수있는 것은 gen.py를 통한 반복 실행이므로 디버그하기가 어렵습니다. – egbokul