Отправка множественных запросов httplib, вызывающих исключения трассировки

#python #django #httplib

#python #django #httplib

Вопрос:

Вот код:

 conn = httplib.HTTPConnection("127.0.0.1:8000")
conn.request("POST", "/api/job/", some_params, headers)
conn.close()
  

нет проблем с отправкой запроса на сервер

но если я использую цикл, например:

 for i in range(n):
   conn = httplib.HTTPConnection("127.0.0.1:8000")
   conn.request("POST", "/api/job/", some_params, headers)
   conn.close()
  

возникает исключение, но интересно, что запрос выполнен успешно:

 Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 284, in run
self.finish_response()
File "/usr/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 324, in finish_response
self.write(data)
File "/usr/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 403, in write
self.send_headers()
File "/usr/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 467, in send_headers
self.send_preamble()
File "/usr/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 385, in send_preamble
'Date: %srn' % http_date()
File "/usr/lib/python2.7/socket.py", line 324, in write
self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 60438)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 570, in __init__
BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
File "/usr/lib/python2.7/SocketServer.py", line 641, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 694, in finish
self.wfile.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
  

есть предложения???

Комментарии:

1. Успешно ли выполняется только первый запрос в цикле?? или это все запросы? используете ли вы однопоточный сервер разработки?

Ответ №1:

Мне кажется, что ваш буфер заполняется. Ваш буфер будет заполняться любыми сетевыми запросами, которые вы делаете, затем очищается, когда сервер подтверждает получение данных. Не уверен, что нет лучшего способа сделать это, но вы могли бы попробовать дать серверу некоторое время для подтверждения получения, выполнив короткое time.pause замыкание в вашем цикле.