首页 > 解决方案 > 没有响应的远程结束关闭连接(Python 3-Bugzilla)

问题描述

我目前正在从事一个涉及 python-bugzilla 模块的项目。当我尝试收集一些错误数据时,我收到以下错误: RemoteDisconnected : Remote end closed connection without response

api = Bugzilla(url)
product = ...
request = api.build_query(product=product, include_fields=["id"])
data = api.query(request)
ids = np.array([bug.id for bug in data]).reshape(-1)
n = ids.shape[0]
q = 500 #size of bug package
if q < n :
    m = n%q
    k = (n+q-m)/q
else:
    k = n
ids_splitted = np.array_split(ids, k)
bugs = []
for ids_ in ids_splitted:
    bugs = bugs + api.getbugs(ids_)

完整的错误是:

---------------------------------------------------------------------------
RemoteDisconnected                        Traceback (most recent call last)
~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    599                                                   body=body, headers=headers,
--> 600                                                   chunked=chunked)
    601 

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    383                     # otherwise it looks like a programming error was the cause.
--> 384                     six.raise_from(e, None)
    385         except (SocketTimeout, BaseSSLError, SocketError) as e:

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/packages/six.py in raise_from(value, from_value)

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    379                 try:
--> 380                     httplib_response = conn.getresponse()
    381                 except Exception as e:

~/anaconda3/envs/DataScience/lib/python3.7/http/client.py in getresponse(self)
   1320             try:
-> 1321                 response.begin()
   1322             except ConnectionError:

~/anaconda3/envs/DataScience/lib/python3.7/http/client.py in begin(self)
    295         while True:
--> 296             version, status, reason = self._read_status()
    297             if status != CONTINUE:

~/anaconda3/envs/DataScience/lib/python3.7/http/client.py in _read_status(self)
    264             # sending a valid response.
--> 265             raise RemoteDisconnected("Remote end closed connection without"
    266                                      " response")

RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

ProtocolError                             Traceback (most recent call last)
~/anaconda3/envs/DataScience/lib/python3.7/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    448                     retries=self.max_retries,
--> 449                     timeout=timeout
    450                 )

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    637             retries = retries.increment(method, url, error=e, _pool=self,
--> 638                                         _stacktrace=sys.exc_info()[2])
    639             retries.sleep()

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/util/retry.py in increment(self, method, url, response, error, _pool, _stacktrace)
    366             if read is False or not self._is_method_retryable(method):
--> 367                 raise six.reraise(type(error), error, _stacktrace)
    368             elif read is not None:

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/packages/six.py in reraise(tp, value, tb)
    684         if value.__traceback__ is not tb:
--> 685             raise value.with_traceback(tb)
    686         raise value

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    599                                                   body=body, headers=headers,
--> 600                                                   chunked=chunked)
    601 

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    383                     # otherwise it looks like a programming error was the cause.
--> 384                     six.raise_from(e, None)
    385         except (SocketTimeout, BaseSSLError, SocketError) as e:

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/packages/six.py in raise_from(value, from_value)

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    379                 try:
--> 380                     httplib_response = conn.getresponse()
    381                 except Exception as e:

~/anaconda3/envs/DataScience/lib/python3.7/http/client.py in getresponse(self)
   1320             try:
-> 1321                 response.begin()
   1322             except ConnectionError:

~/anaconda3/envs/DataScience/lib/python3.7/http/client.py in begin(self)
    295         while True:
--> 296             version, status, reason = self._read_status()
    297             if status != CONTINUE:

~/anaconda3/envs/DataScience/lib/python3.7/http/client.py in _read_status(self)
    264             # sending a valid response.
--> 265             raise RemoteDisconnected("Remote end closed connection without"
    266                                      " response")

ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

During handling of the above exception, another exception occurred:

ConnectionError                           Traceback (most recent call last)
<ipython-input-9-820dd90f4151> in <module>
      1 t0 = time()
      2 request = api.build_query(product=product, include_fields=["id"])
----> 3 data = api.query(request)
      4 ids = np.array([bug.id for bug in data]).reshape(-1)
      5 n = ids.shape[0]

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/bugzilla/base.py in query(self, query)
   1263         """
   1264         try:
-> 1265             r = self._proxy.Bug.search(query)
   1266         except Fault as e:
   1267 

~/anaconda3/envs/DataScience/lib/python3.7/xmlrpc/client.py in __call__(self, *args)
   1110         return _Method(self.__send, "%s.%s" % (self.__name, name))
   1111     def __call__(self, *args):
-> 1112         return self.__send(self.__name, args)
   1113 
   1114 ##

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/bugzilla/transport.py in _ServerProxy__request(self, methodname, params)
    102         # pylint: disable=no-member
    103         ret = super(_BugzillaServerProxy,
--> 104                 self)._ServerProxy__request(methodname, params)
    105         # pylint: enable=no-member
    106 

~/anaconda3/envs/DataScience/lib/python3.7/xmlrpc/client.py in __request(self, methodname, params)
   1450             self.__handler,
   1451             request,
-> 1452             verbose=self.__verbose
   1453             )
   1454 

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/bugzilla/transport.py in request(self, host, handler, request_body, verbose)
    199         request_body = request_body.replace(b'\r', b'&#xd;')
    200 
--> 201         return self._request_helper(url, request_body)

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/bugzilla/transport.py in _request_helper(self, url, request_body)
    162         try:
    163             response = self.session.post(
--> 164                 url, data=request_body, **self.request_defaults)
    165 
    166             # We expect utf-8 from the server

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/requests/sessions.py in post(self, url, data, json, **kwargs)
    579         """
    580 
--> 581         return self.request('POST', url, data=data, json=json, **kwargs)
    582 
    583     def put(self, url, data=None, **kwargs):

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    531         }
    532         send_kwargs.update(settings)
--> 533         resp = self.send(prep, **send_kwargs)
    534 
    535         return resp

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/requests/sessions.py in send(self, request, **kwargs)
    644 
    645         # Send the request
--> 646         r = adapter.send(request, **kwargs)
    647 
    648         # Total elapsed time of the request (approximately)

~/anaconda3/envs/DataScience/lib/python3.7/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    496 
    497         except (ProtocolError, socket.error) as err:
--> 498             raise ConnectionError(err, request=request)
    499 
    500         except MaxRetryError as e:

ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

有人可以帮我解决这个问题吗?这真的很奇怪,因为我的代码在 2 周前工作了......

编辑:我运行了代码几次,我注意到它可以完美运行或停止......所以,我认为这不是由于我的代码而是由于另一件事。由于我不是专家,我不知道这可能是什么原因......所以,如果有人可以向我解释一下,那就太好了

EDIT2:如果有人有同样的问题,那是由于服务器活动。一些服务器限制调用频率。为了解决这个问题,可以尝试让代码休眠 1 秒钟,这应该可以完成这项工作。但是,运行时间会增加。

标签: pythonbugzilla

解决方案


推荐阅读