저는 파이썬 2.7과 토네이도 3.2를 실험 해 왔습니다. 나는이 작동하는 간단한 코 루틴 예제를 얻기 위해 노력했지만, 많은 행운없이 : URL을 컬링 때 늘릴 수 없습니다. 코 루틴을 사용할 때의 작업으로 돌아 가기
import tornado.web
from tornado.gen import coroutine
from tornado.httpclient import AsyncHTTPClient
from tornado.gen import Return
class MainHandler(tornado.web.RequestHandler):
# Tried with and without @asynchronous
@tornado.web.asynchronous
def get(self):
data = MainService().get_google_data()
self.write(data)
class MainService:
@coroutine
def get_google_data(self):
response = yield AsyncHTTPClient().fetch("http://www.google.com")
raise Return(value = 'hello')
나는이 '안녕하세요'쓰는 것 예상.
...
File "/vagrant/venv/lib/python2.7/site-packages/tornado/web.py", line 656, in write
raise TypeError("write() only accepts bytes, unicode, and dict objects")
TypeError: write() only accepts bytes, unicode, and dict objects
분명히, Future를 돌려되고 있지만, 미래에 result()
를 호출하면 다른 예외가 발생합니다 : 대신, 내가 할 DummyFuture does not support blocking for results
문서는 위해 코 루틴에서 값을 반환하는 말 토네이도, Return 예외를 발생시킵니다. 소스 코드를 보면, 실제로 예상 한 것 같습니다. 그러나, 그것을 실행할 때, 그것은 작동하지 않는 것 같습니다.
이 점에 대해 통찰력을주십시오!
Runner.run()에 깊이 파고 들자면, 내가하는 일에 대한 결론에 도달했을 수도 있습니다. – MrSilverSnorkel
제쳐두고, 당신은''Return ('hello')'를 올릴 수 있습니다. 'value ='가 필요 없습니다. – dano
@dano 그래, 값 = 정당한 이유없이 거기에 있었다. 러너를 들여다 보니, 언뜻보기에 내가 생각했던 것을하지 못한다. 그것은 당신이 당신의 대답에서 말하는 것이라고 생각하는 미래를 되돌려줍니다. – MrSilverSnorkel