我的问题如下:我的应用程序需要使用 python 中的 Boto 库同时将多个文件上传到 S3。我已经制定了 2 个解决方案,但我不确定每个解决方案的含义。一些考虑:
- 这将在 EC2 微型实例上运行,因此内存低、CPU 低
- 通常需要一次上传1-10个文件,但可以更多
解决方案,最快然后最慢:
1)使用“手动”创建线程from threading import Thread
。这大约执行。0.02 秒。
from boto.s3.connection import S3Connection
from threading import Thread
import time
filenames = ['1.json', '2.json', '3.json', '4.json', '5.json', '6.json', '7.json', '8.json', '9.json', '10.json']
def upload(myfile):
conn = S3Connection(aws_access_key_id=AWS_KEY, aws_secret_access_key=AWS_SECRET)
bucket = conn.get_bucket("parallel_upload_tests")
key = bucket.new_key(myfile).set_contents_from_string('some content')
return myfile
for fname in filenames:
t = Thread(target = upload, args=(fname,)).start()
2)使用模块中ThreadPool
的a 。multiprocessing
这大约需要。0.3 秒执行(几乎慢 10 倍)
from boto.s3.connection import S3Connection
from multiprocessing.pool import ThreadPool
import time
filenames = ['1.json', '2.json', '3.json', '4.json', '5.json', '6.json', '7.json', '8.json', '9.json', '10.json']
def upload(myfile):
conn = S3Connection(aws_access_key_id=AWS_KEY, aws_secret_access_key=AWS_SECRET)
bucket = conn.get_bucket("parallel_upload_tests")
key = bucket.new_key(myfile).set_contents_from_string('some content')
return myfile
pool = ThreadPool(processes=16)
pool.map(upload, filenames)
- 这两种使线程池慢 10 倍的方法之间有什么区别?
- 对于我提出的不同方法或建议的任何替代建议?
非常感谢。
编辑:我也刚刚意识到multiprocessing
有一个pool
(可能会创建新进程)和ThreadPool
(可能会创建线程工作者)。我有点困惑。