Я использую python для отправки нескольких HTTP-запросов. > 1000 запросов запускаются асинхронно одновременно. Но я получаю сообщение об ошибке: достигнут лимит max_clients, запрос торнадо в очереди и через некоторое время я получаю сообщение об ошибке тайм-аута.
Как вы решаете такие проблемы, отправляя несколько HTTP-запросов и избегая тайм-аута?
Вот код, который я использую:
class AjaxBatchHandler(basehandler.BaseHandler):
@tornado.gen.coroutine
def post(self):
# just respond with a status, no redirect to login
if not self.get_current_user:
self.set_status(403)
batch = json.loads(self.get_argument("actions").encode('utf-8'))
client = tornado.httpclient.AsyncHTTPClient()
batch_requests = []
for item in batch['actions']:
request = utils.build_request(
self,
action=item['action'].replace("{API}", utils.get_api_baseurl()),
values=item['values'])
batch_requests.append(client.fetch(request))
try:
batch_responses = yield batch_requests
batch_result = dict(results=[])
for result in batch_responses:
batch_result['results'].append(json.loads(result.body))
except tornado.httpclient.HTTPError as e:
batch_result = dict(results=[])
batch_result['results'].append({"Status": 500,
"StatusMsg": e.message,
"Error": e.code
})
self.write(batch_result)