需要aioboto3的帮助。上传过程中出现多个错误。
我是异步世界的新手,我试图使用aioboto3从我的笔记本电脑上传多个文件到S3。下面是我的代码(大部分)。只是需要一些快速的方法将多个文件从本地机器传输到AWS S3。所以我从这里复制了
现在,甚至不确定是否使用aioboto3是一个好主意,然而,我真的很喜欢异步编程的概念和任何帮助/指针来解决/调试这些错误将非常感激。
async def upload(staging_path):
session = aioboto3.Session(aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY)
v_file_path = Path(staging_path)
blob_s3_key = bucket_folder + staging_path.rsplit('\', 1)[-1]
async with session.client("s3") as s3:
try:
with v_file_path.open("rb") as spfp:
print(f"Uploading {blob_s3_key} to s3")
await s3.upload_fileobj(spfp, bucket, blob_s3_key)
print(f"Finished Uploading {blob_s3_key} to s3")
except Exception as e:
print(f"Unable to s3 upload {staging_path} to {blob_s3_key}: {e} ({type(e)})")
return ""
async def run_proc(file_upload_list):
tasks0 = []
for i in file_upload_list:
task0 = asyncio.ensure_future(upload(i))
tasks0.append(task0)
v_ret = await asyncio.gather(*tasks0)
我得到这些错误的大多数文件。只有3 -4个文件被上传到S3:
错误# 1:
[WinError 10054]已存在的连接被远程主机强制关闭(
)
错误# 2:
无法连接主机my-s3-bucket-nm.s3.us-east-1.amazonaws.com:443 ssl:default [getaddrinfo failed] (
)
错误# 3:
不能连接到主机我- s3 bucket - nm.s3.us -东- 1. amazonaws.com: 443 ssl:默认(连接失败("XX.XXX.XXX打电话。(
)
错误# 4:
调用UploadPart操作时发生错误(RequestTimeout)(达到最大重试次数:4):您与服务器的套接字连接未在超时时间内读取或写入。空闲连接将被关闭。(& lt;类botocore.exceptions.ClientError的祝辞)
错误# 5:
调用UploadPart操作时发生错误(RequestTimeout)(达到最大重试次数:4):您与服务器的套接字连接未在超时时间内读取或写入。空闲连接将被关闭。(& lt;类botocore.exceptions.ClientError的祝辞)
在这一点上,我想说这个问题已经部分结束了。约90%解决。
以下是我的两个发现:
- 退出公司VPN显著提高了代码性能。
- aioboto3。Session(aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY)也必须提供"aws region";参数。
因为这个问题还没有100%解决,我已经把我的方法切换到好的旧多线程。然而,通过上面提到的2个步骤,代码运行得很好,偶尔会出现与网络相关的中断。
谢谢!