- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
刚接触tornado,所以跟着tornado的指导练习,当我开始使用Coroutines的时候,例子是这样说的: 从 Tornado 导入生成
@gen.coroutine
def fetch_coroutine(url):
http_client = AsyncHTTPClient()
response = yield http_client.fetch(url)
# In Python versions prior to 3.3, returning a value from
# a generator is not allowed and you must use
# raise gen.Return(response.body)
# instead.
return response.body
当我运行这个测试时,它引发了 SyntaxError 'return' with argument inside generator,所以我取消了建议的注释,如下所示: 导入 tornado.httpserver 进口 Tornado .ioloop 导入 tornado.options 导入 tornado.web
from tornado.options import define, options
define("port", default=8888, help="run on the given port", type=int)
from tornado import gen
from tornado.httpclient import AsyncHTTPClient
@gen.coroutine
def fetch_coroutine(url):
http_client = AsyncHTTPClient()
response = yield http_client.fetch(url)
#return response.body
raise gen.Return(response.body)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
data = fetch_coroutine(url = "http://www.baidu.com")
self.write(data)
print data
def main():
tornado.options.parse_command_line()
application = tornado.web.Application([
(r"/", MainHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
但它会引发这样的异常:
[E 140925 17:35:53 web:1407] Uncaught exception GET / (::1)
HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/', version='HTTP/1.1', remote_ip='::1', headers={'Accept-Language': 'zh-TW,zh;q=0.8,zh-CN;q=0.6,en;q=0.4', 'Accept-Encoding': 'gzip,deflate,sdch', 'Host': 'localhost:8888', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'If-None-Match': '"e02aa1b106d5c7c6a98def2b13005d5b84fd8dc8"'})
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/tornado-4.0.2-py2.7-macosx-10.9-intel.egg/tornado/web.py", line 1332, in _execute
result = method(*self.path_args, **self.path_kwargs)
File "helloworld.py", line 39, in get
self.write(data)
File "/Library/Python/2.7/site-packages/tornado-4.0.2-py2.7-macosx-10.9-intel.egg/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
[E 140925 17:35:53 web:1811] 500 GET / (::1) 3.94ms
最佳答案
文档非常similar example :
class GenAsyncHandler(RequestHandler):
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient()
response = yield http_client.fetch("http://example.com")
do_something_with_response(response)
self.render("template.html")
总结:
@gen.coroutine
装饰,只允许单个 return
raise gen.Return
,正如你正确理解的那样get
方法中返回任何东西来响应一些数据给客户端。您需要为它编写
一些东西(在上面的示例中,它是通过调用 self.render
完成的)。所以,替换这段代码
do_something_with_response(response)
self.render("template.html")
用这个:
self.write(response.body)
self.finish()
self.finish()
将完成响应,结束 HTTP 请求。它在 self.render
方法中自动调用。
最终请求处理程序:
from tornado import gen
from tornado.web import RequestHandler
from tornado.httpclient import AsyncHTTPClient
class GenAsyncHandler(RequestHandler):
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient()
response = yield http_client.fetch("http://google.com")
self.write(response.body)
self.finish()
关于python - tornado 使用 AsyncHTTPClient 和 gen 请求 url,使用 raise gen.Return 获取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035303/
第 0 代:所以我读到当 gen 0 超过大小阈值时 gen 0 触发。但我也读到GC不是在"new"时执行的,因为"new"只是向前滑动一个地址。那么,它什么时候检查它是否超过了触发 gen 0 G
“static final”是直接分配到young gen还是old gen还是perm gen? (我想它很可能会在我想的时间内落入老一代。)如果它在 perm gen 中分配,那么当在 Perm
这是一种情况,当必须将并行性引入后端服务器时。 我愿意查询 N 个 ELB,每个查询 5 个不同的查询,并将结果发送回 Web 客户端。 后端是Tornado,根据我在docs中多次阅读的内容,在过去
我正在尝试创建列表的随机排列。我是函数式语言中随机性的新手,还没有完全掌握 monad,但我以我认为应该有效的方式使用了 Random.newStdGen 和 Random.Shuffle.shuff
经过 tornado.gen documentation有人可以帮我理解 tornado.gen.coroutine 和 tornado.gen.engine 之间的确切区别 最佳答案 正如 gen.
在 document , 如果方法也用@gen.coroutine 修饰,则不需要@web.asynchronous。像这样 @web.asynchronous @gen.coroutine def
我们在带有相量的同一个 gen~ 代码框对象中有两个地方: wander = phasor(in8/dense); ...some code later... phas = (triangle(pha
我正在从事的项目都是用 Tornado 编写的,但我包含了一些 Twisted 来处理异步 XML-RPC。我想知道您是否可以使用 Tornado 的 gen.engine 和 yield gen.T
如何查看protoc-gen-go和protoc-gen-validate的版本? protoc-gen-go --version protoc-gen-validate --version 我试过上
我们使用的是 protoc-gen-go v2(v2 是 google.golang.org/protobuf,v1 是 github.com/golang/protobuf) 当我们尝试编译 gRP
刚接触tornado,所以跟着tornado的指导练习,当我开始使用Coroutines的时候,例子是这样说的: 从 Tornado 导入生成 @gen.coroutine def fetch_cor
当您创建 Python 3 生成器并立即开始运行它时。您会收到如下错误: TypeError: can't send non-None value to a just-started generato
当我在 eclipse 中清理和构建 android 项目时,它会删除 bin 文件夹和 gen 文件夹的内容,并且不会重新创建它只是创建空文件夹 gen 和 bin 为什么会发生这种情况我搜索了很多
我想使用来自 protoc-gen-grpc-kotlin 的 protoc-gen-grpc-kotlin-1.0.0我得到了 Execution failed for task ':generat
我想使用来自 protoc-gen-grpc-kotlin 的 protoc-gen-grpc-kotlin-1.0.0我得到了 Execution failed for task ':generat
在 :constructors 映射和后续的 -init 定义中,我如何表示可变参数构造函数(假设父类(super class)有多个构造函数,其中一个是可变参数)? 最佳答案 由于可变参数本质上是对
我正在使用jwilder/nginx-proxy,以便在我的domain.tld中有一个项目,在api.domain.tld中有一个项目。我关注了this tutorial,自定义default.co
我刚刚重新格式化了我的电脑。我有 windows xp sp3 32 位。我安装java jdk安卓SDK eclipse ide 当我去创建一个新的 android 项目时,我得到了这个错误。 项目
我正在开发我的 Android 项目,删除未使用的库后,我收到 错误: myproject/gen already exists but is not a source folder. Convert
protoc-gen-doc 自定义模板规则详解 配套演示工程 此项目中所用 proto 文件位于 ./proto 目录下,来源于 官方proto示例 此项目中所列所有
我是一名优秀的程序员,十分优秀!