我怀疑下面的代码用尽了连接容量,等等。我可以使用任何接口发送批处理请求吗?还是睡几毫秒?
def archive_pending_blobs(bucket: Bucket, blobs: typing.List[Blob], pending_prefix: str,
loaded_prefix: str) -> None:
"""Archive pending blobs to loaded prefix."""
try:
for b in blobs:
bucket.copy_blob(b, bucket, b.name.replace(pending_prefix, loaded_prefix))
bucket.delete_blobs(blobs)
except Exception as e:
print('gcs achieving error for path: {} err: {}'.format(pending_prefix, e))
raise e
跟踪(最近一次通话最近):文件“ /env/local/lib/python3.7/site-packages/urllib3/connectionpool.py”,第600行,在urlopen中,chunked = chunked)文件“ / env / local /lib/python3.7/site-packages/urllib3/connectionpool.py”,第384行,在_make_request six.raise_from(e,None)文件“”,第2行,在凸起文件中,“ / env / local / lib / python3” .7 / site-packages / urllib3 / connectionpool.py“,行380,在_make_request中,httplib_response = conn.getresponse() getresponse response.begin()中的文件“ /opt/python3.7/lib/python3.7/http/client.py”,第1321行,文件“ /opt/python3.7/lib/python3.7/http/client” “ .py”,第296行,处于开始版本,状态,原因= self._read_status()文件“ /opt/python3.7/lib/python3.7/http/client.py”,第257行,位于_read_status行= str (self.fp.readline(_MAXLINE + 1),“ iso-8859-1”)文件“ /opt/python3.7/lib/python3.7/socket.py”,第589行,已读入,以返回self._sock。 recv_into(b)文件“ /opt/python3.7/lib/python3.7/ssl.py”,行1049,在recv_in中返回self.read(nbytes,buffer)文件“ /opt/python3.7/lib/python3 “ .7 / ssl.py”,行908,在读取返回self._sslobj.read(len,buffer)ConnectionResetError:[Errno 104]对等方重置连接在处理上述异常期间,发生了另一个异常:Traceback(最近一次调用)最后):文件“ /env/local/lib/python3.7/site-packages/requests/adapters.py”,第445行,在send timeout = timeout文件“ /env/local/lib/python3.7/site-包/urllib3/connectionpool.py”,第638行, lopen _stacktrace = sys.exc_info()[2])文件“ /env/local/lib/python3.7/site-packages/urllib3/util/retry.py”,行367,增量为六。错误),错误,_stacktrace)文件“ /env/local/lib/python3.7/site-packages/urllib3/packages/six.py”,行685,重新提高价值。with_traceback(tb)文件“ / env /本地/lib/python3.7/site-packages/urllib3/connectionpool.py”,行600,在urlopen中,分块=分块)文件“ /env/local/lib/python3.7/site-packages/urllib3/connectionpool.py” ,在_make_request六行中的第384行。raise_from(e,None)文件在“ /env/local/lib/python3.7/site-packages/urllib3/connectionpool.py”中,在抬起自文件“ /env/local/lib/python3.7/”中的第2行,第380行,在_make_request中,httplib_response = conn.getresponse()文件“ /opt/python3.7/lib/python3.7/http/client.py”中的第1321行,在getresponse response.begin()文件中,“ / opt / python3.7 /lib/python3.7/http/client.py”,第296行,开始版本,状态,原因= self._read_status()文件“ /opt/python3.7/lib/python3.7/http/client.py” “,第257行,位于_read_status林中e = str(self.fp.readline(_MAXLINE + 1),“ iso-8859-1”)文件“ /opt/python3.7/lib/python3.7/socket.py”,行589,在readin中返回self ._sock.recv_into(b)recv_in中的文件“ /opt/python3.7/lib/python3.7/ssl.py”,行1049,返回self.read(nbytes,buffer)文件“ /opt/python3.7/ lib / python3.7 / ssl.py“,第908行,读取返回self._sslobj.read(len,buffer)urllib3.exceptions.ProtocolError:('Connection aborted。',ConnectionResetError(104,'对等重置连接' ))在处理上述异常期间,发生了另一个异常:追溯(最近一次调用为最新):文件“ /user_code/main.py”,第230行,位于bq_merge archive_pending_blobs(存储桶,blob [min_idx:max_idx],pending_prefix,loaded_prefix )archive_pending_blobs中第44行的文件“ /user_code/main.py”引发archive_pending_blobs中第40行的文件“ /user_code/main.py” bucket.copy_blob(b,bucket,b.name.replace(pending_prefix,loaded_prefix ))在第711行中输入“ /env/local/lib/python3.7/site-packages/google/cloud/storage/bucket.py” copy_blob _target_object = new_blob,文件“ /env/local/lib/python3.7/site-packages/google/cloud/_http.py”,第290行,位于api_request标头=标头,target_object = _target_object)文件“ / env / local /lib/python3.7/site-packages/google/cloud/_http.py“,第183行,在_make_request中返回self._do_request(方法,URL,标头,数据,target_object)文件“ / env / local / lib / python3 .7 / site-packages / google / cloud / _http.py“,行212,在_do_request中url = url,方法=方法,标头=标头,数据=数据)文件“ /env/local/lib/python3.7/ site-packages / google / auth / transport / requests.py“,第201行,在请求方法中,URL,数据=数据,标头= request_headers,** kwargs)文件“ /env/local/lib/python3.7/site” -packages / requests / sessions.py“,第512行,在请求中resp = self.send(prep,** send_kwargs)文件” /env/local/lib/python3.7/site-packages/requests/sessions.py“ ,在发送r = adapter.send(request,** kwargs)中的第622行,在发送中发出的文件“ /env/local/lib/python3.7/site-packages/requests/adapters.py”,在发送中,抬起ConnectionEr ror(err,request = request)request.exceptions.ConnectionError:('Connection aborted。',ConnectionResetError(104,'Peer重置连接'))在处理上述异常期间,发生了另一个异常:追溯(最近一次调用最近) ):文件“ /env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py”,li
答案 0 :(得分:2)
关于Connection reset by peer
的{{3}},这似乎是一个致命错误,因为远程服务器发送RST数据包以立即断开连接。
此StackOverflow answer解决了解决方法。给出的解决方案使用time.sleep
,但是,正如我们在评论中所讨论的,在您的情况下不起作用。这就是为什么我建议使用other SO answer的另一种方法:
截断的指数退避是网络应用程序的标准错误处理策略,其中客户端定期重试失败的请求,并增加请求之间的延迟。 [...]
通过客户端库访问Cloud Storage。请注意,某些客户端库(例如,用于Node.js的云存储客户端库)具有内置的指数补偿。
Python没有内置的指数补偿功能,但是Python中有一个truncated exponential backoff使用此方法。