【发布时间】:2016-12-01 20:30:24
【问题描述】:
如何使用Tornado 最小化线程锁?实际上,我已经有了工作代码,但我怀疑它不是完全异步的。
我有一个很长的任务。
它包括向CouchDB 发出多个请求以获取元数据并构建最终链接。然后我需要向CouchDB 发出最后一个请求并流式传输一个文件(从 10 MB 到 100 MB)。因此,结果将是一个大文件流式传输到客户端。
服务器可以同时接收100个下载大文件的请求并且我不需要锁定线程并不断接收新请求的问题(我必须最小化线程锁定)。
所以,我正在发出几个同步请求(requests 库),然后使用 AsyncHttpClient 流式传输一个带有块的大文件。
问题如下:
1) 我应该在任何地方使用AsyncHTTPClient吗?由于我有一些接口,因此将所有同步请求替换为异步请求将花费大量时间。值得吗?
2) 我应该使用tornado.curl_httpclient.CurlAsyncHTTPClient 吗?代码会运行得更快吗(文件下载、发出请求)?
3) 我看到Python 3.5 引入了async,理论上它可以更快。我应该使用异步还是继续使用装饰器@gen.coroutine?
【问题讨论】:
标签: python multithreading asynchronous couchdb tornado