我想通过yield [ list_of_futures ]
轻松地同时执行100个请求。
但是这个方法当时只执行10个请求!
我准备了一个简短的例子来说明它,只是运行,你会看到当时10个请求的部分执行的请求。
使用debian stretch和ubuntu 16.04进行测试,结果相同。
Python 3.6.1,
龙卷风== 4.5.1
from datetime import datetime
import tornado.ioloop
import tornado.gen
import tornado.web
from tornado.httpclient import AsyncHTTPClient
# the same for tornado and curl clients
# AsyncHTTPClient.configure('tornado.curl_httpclient.CurlAsyncHTTPClient')
http_client = AsyncHTTPClient()
class MainHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self, **kwargs):
yield self.write('<html><pre>')
yield tornado.gen.sleep(5)
yield self.finish('long page test</pre></html>')
def make_app():
return tornado.web.Application([
tornado.web.url('^/test', MainHandler),
])
@tornado.gen.coroutine
def long_request(n):
print('long_request {n} start'.format(n=n))
response = yield http_client.fetch('http://127.0.0.1:8000/test')
yield tornado.gen.sleep(5)
print('{date} long_request {n} finish, size {size}'.format(
date=datetime.now(), n=n, size=len(response.body))
)
@tornado.gen.coroutine
def requests_handler():
print('Requests handler started')
yield [long_request(n) for n in range(100)]
print('Requests handler finished')
app = make_app()
app.listen(8000, '127.0.0.1')
tornado.ioloop.IOLoop.current().add_callback(callback=requests_handler)
tornado.ioloop.IOLoop.current().start()
答案 0 :(得分:0)
哎呀,刚刚发现它是什么。
每个客户端只能执行max_clients请求。
AsyncHTTPClient.configure(
'tornado.curl_httpclient.CurlAsyncHTTPClient',
max_clients=100
)
AsyncHTTPClient.configure(
'tornado.simple_httpclient.SimpleAsyncHTTPClient',
max_clients=100
)
但我认为这不是一个明显的行为,所以我认为它应该留在这里为下一个googlers。