我是Tornado的新手,所以我想知道下面的代码是否是解决问题的正确方法,或者是更好的方法。它有效,但我不确定它的效率。
代码基于文档here
在我的脚本中间,我需要运行HTTP请求(10-50)。显然,可以通过这种方式并行执行此操作:
@gen.coroutine
def parallel_fetch_many(urls):
responses = yield [http_client.fetch(url) for url in urls]
# responses is a list of HTTPResponses in the same order
协程完成后如何访问响应?我可以添加return responses
吗?
另外,因为我只需要在代码中使用一次异步进程,所以我就这样启动IOLoop:
# run_sync() doesn't take arguments, so we must wrap the
# call in a lambda.
IOLoop.current().run_sync(lambda: parallel_fetch_many(googleLinks))
这样做是否正确?或者我应该在脚本开头启动IOLoop并将其停止结束,即使我只使用一次异步过程。
基本上,我的问题是:下面的代码是否正确?
@gen.coroutine
def parallel_fetch_many(urls):
responses = yield [http_client.fetch(url) for url in urls]
return responses
googleLinks = [url1,url2,...,urln]
responses = IOLoop.current().run_sync(lambda:parallel_fetch_many(googleLinks))
do_something(responses)
答案 0 :(得分:1)
是的,您的代码对我来说是正确的。