如何解决python dropbox上载脚本中的超时错误?

如何解决python dropbox上载脚本中的超时错误?,python,raspberry-pi3,dropbox,Python,Raspberry Pi3,Dropbox,我目前正在做一个项目,用覆盆子pi3做一个时间点(效果很好,拍摄照片不是问题) 然而,我使用另一个脚本将这些照片上传到dropbox帐户,它工作得很好,直到今天我签出它,看到超时错误 有人知道这是怎么解决的吗 这就是错误: Traceback (most recent call last): File "/home/pi/.local/lib/python3.5/site-packages/urllib3/contrib/pyopenssl.py", line 453, in wrap_so

我目前正在做一个项目,用覆盆子pi3做一个时间点(效果很好,拍摄照片不是问题)

然而,我使用另一个脚本将这些照片上传到dropbox帐户,它工作得很好,直到今天我签出它,看到超时错误

有人知道这是怎么解决的吗

这就是错误:

Traceback (most recent call last):
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/contrib/pyopenssl.py", line 453, in wrap_socket
    cnx.do_handshake()
  File "/usr/lib/python3/dist-packages/OpenSSL/SSL.py", line 1426, in do_handshake
    self._raise_ssl_error(self._ssl, result)
  File "/usr/lib/python3/dist-packages/OpenSSL/SSL.py", line 1149, in _raise_ssl_error
    raise WantReadError()
OpenSSL.SSL.WantReadError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 343, in _make_request
    self._validate_conn(conn)
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 839, in _validate_conn
    conn.connect()
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/connection.py", line 344, in connect
    ssl_context=context)
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/util/ssl_.py", line 344, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/contrib/pyopenssl.py", line 456, in wrap_socket
    raise timeout('select timed out')
socket.timeout: select timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/pi/.local/lib/python3.5/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/util/retry.py", line 367, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/packages/six.py", line 686, in reraise
    raise value
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 346, in _make_request
    self._raise_timeout(err=e, url=url, timeout_value=conn.timeout)
  File "/home/pi/.local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 306, in _raise_timeout
    raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='content.dropboxapi.com', port=443): Read timed out. (read timeout=30)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/pi/Desktop/time/picture/drop.py", line 16, in <module>
    response = db.files_upload(f.read(), dname)
  File "/home/pi/.local/lib/python3.5/site-packages/dropbox/base.py", line 2293, in files_upload
    f,
  File "/home/pi/.local/lib/python3.5/site-packages/dropbox/dropbox.py", line 274, in request
    timeout=timeout)
  File "/home/pi/.local/lib/python3.5/site-packages/dropbox/dropbox.py", line 365, in request_json_string_with_retry
    timeout=timeout)
  File "/home/pi/.local/lib/python3.5/site-packages/dropbox/dropbox.py", line 449, in request_json_string
    timeout=timeout,
  File "/home/pi/.local/lib/python3.5/site-packages/requests/sessions.py", line 581, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/home/pi/.local/lib/python3.5/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/pi/.local/lib/python3.5/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/home/pi/.local/lib/python3.5/site-packages/requests/adapters.py", line 529, in send
    raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='content.dropboxapi.com', port=443): Read timed out. (read timeout=30)
>>> 

新错误:

回溯(最近一次呼叫最后一次):
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/contrib/pyopenssl.py”,第317行,在发送之前
返回self.connection.send(数据)
文件“/usr/lib/python3/dist packages/OpenSSL/SSL.py”,第1256行,在send中
self.\u raise\u ssl\u错误(self.\u ssl,结果)
文件“/usr/lib/python3/dist-packages/OpenSSL/SSL.py”,第1151行,出现错误
引发WantWriteError()
OpenSSL.SSL.WantWriteError
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/connectionpool.py”,第600行,在urlopen中
分块=分块)
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/connectionpool.py”,第354行,在请求中
conn.request(方法,url,**httplib\u request\u kw)
请求中的文件“/usr/lib/python3.5/http/client.py”,第1107行
self.\u发送请求(方法、url、正文、标题)
文件“/usr/lib/python3.5/http/client.py”,第1152行,在发送请求中
self.endheaders(主体)
文件“/usr/lib/python3.5/http/client.py”,第1103行,在endheaders中
自发送输出(消息体)
文件“/usr/lib/python3.5/http/client.py”,第936行,在发送输出中
self.send(消息体)
文件“/usr/lib/python3.5/http/client.py”,第908行,在send中
self.sock.sendall(数据)
sendall中的文件“/home/pi/.local/lib/python3.5/site packages/urlib3/contrib/pyopenssl.py”,第328行
发送=自。发送直到完成(数据[发送总数:发送总数+SSL写入块大小])
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/contrib/pyopenssl.py”,第320行,在发送之前
提升超时()
套接字超时
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/home/pi/.local/lib/python3.5/site packages/requests/adapters.py”,第449行,在send中
超时=超时
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/connectionpool.py”,第638行,在urlopen中
_stacktrace=sys.exc_info()[2])
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/util/retry.py”,第367行,增量
升起六个。重新升起(类型(错误),错误,_stacktrace)
文件“/home/pi/.local/lib/python3.5/site-packages/urllib3/packages/six.py”,第685行,重新登录
通过_回溯(tb)提升值
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/connectionpool.py”,第600行,在urlopen中
分块=分块)
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/connectionpool.py”,第354行,在请求中
conn.request(方法,url,**httplib\u request\u kw)
请求中的文件“/usr/lib/python3.5/http/client.py”,第1107行
self.\u发送请求(方法、url、正文、标题)
文件“/usr/lib/python3.5/http/client.py”,第1152行,在发送请求中
self.endheaders(主体)
文件“/usr/lib/python3.5/http/client.py”,第1103行,在endheaders中
自发送输出(消息体)
文件“/usr/lib/python3.5/http/client.py”,第936行,在发送输出中
self.send(消息体)
文件“/usr/lib/python3.5/http/client.py”,第908行,在send中
self.sock.sendall(数据)
sendall中的文件“/home/pi/.local/lib/python3.5/site packages/urlib3/contrib/pyopenssl.py”,第328行
发送=自。发送直到完成(数据[发送总数:发送总数+SSL写入块大小])
文件“/home/pi/.local/lib/python3.5/site packages/urllib3/contrib/pyopenssl.py”,第320行,在发送之前
提升超时()
urllib3.exceptions.ProtocolError:(“连接中止”,超时())
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/home/pi/Desktop/time/bild/drop.py”,第20行,在
响应=上传(f,dname)
文件“/usr/local/lib/python3.5/dist packages/backoff/_sync.py”,第94行,在重试中
ret=目标(*args,**kwargs)
文件“/home/pi/Desktop/time/bild/drop.py”,第11行,上传
返回db.files\u上载(f.read(),dname)
文件“/home/pi/.local/lib/python3.5/site packages/dropbox/base.py”,第2293行,在文件上传中
F
请求中的文件“/home/pi/.local/lib/python3.5/site packages/dropbox/dropbox.py”,第274行
超时=超时)
文件“/home/pi/.local/lib/python3.5/site packages/dropbox/dropbox.py”,第365行,在请求\u json\u字符串\u中,带有\u retry
超时=超时)
文件“/home/pi/.local/lib/python3.5/site packages/dropbox/dropbox.py”,第449行,请求字符串
超时=超时,
文件“/home/pi/.local/lib/python3.5/site packages/requests/sessions.py”,post第581行
return self.request('POST',url,data=data,json=json,**kwargs)
文件“/home/pi/.local/lib/python3.5/site packages/requests/sessions.py”,请求中的第533行
resp=自我发送(准备,**发送)
文件“/home/pi/.local/lib/python3.5/site packages/requests/sessions.py”,第646行,在send中
r=适配器.send(请求,**kwargs)
文件“/home/pi/.local/lib/python3.5/site packages/requests/adapters.py”,第498行,在send中
raise CONNECTIONERR(错误,请求=请求)

requests.exceptions.ConnectionError:('Connection aborted',timeout())
在实现处理超时的代码之前,首先需要考虑如何处理超时。一个共同的战略是:

  • 尝试重新上传一定次数,可能与(例如使用)结合使用
  • 如果失败,请跳过当前映像或完全中止进程
根据您的设置,您可能希望将上载代码放在单独的线程中,以便在上载过程中避免延迟
import dropbox
from time import sleep


db = dropbox.Dropbox('apikeyplaceholder')


for i in range(4500): ##4500

    name = 'image{0:04d}.jpg'

    fname = '/home/pi/Desktop/time/picture/'+name.format(i)
    dname = '/'+name.format(i)

    f = open(fname, 'rb')
    response = db.files_upload(f.read(), dname)
    print ('uploaded:', response)

    sleep(585)

f.close()
from time import sleep

import backoff
import dropbox
import requests

db = dropbox.Dropbox('apikeyplaceholder')

@backoff.on_exception(backoff.expo, requests.exceptions.ReadTimeout)
def upload(f, name):
    return db.files_upload(f.read(), dname)

NAME_PATTERN = '/image{0:04d}.jpg'
for i in range(4500):
    name = NAME_PATTERN.format(i)
    fname = '/home/pi/Desktop/time/picture' + name
    with open(fname, 'rb') as f:
        response = upload(f, name)
    print ('uploaded:', response)
    sleep(585)