boto3 verwenden, um viele Testdateien in Wasabi / S3 in Python zu erstellen
English
Deutsch
Der folgende Beispielcode erstellt 10000 Testdateien auf Wasabi / S3. Er basiert auf concurrent.futures map mit tqdm-Fortschrittsbalken verwenden:
create_s3_test_files.py
import boto3
import concurrent.futures
executor = concurrent.futures.ThreadPoolExecutor(64)
from tqdm import tqdm
import concurrent.futures
def tqdm_parallel_map(executor, fn, *iterables, **kwargs):
"""
Äquivalent zu executor.map(fn, *iterables),
aber zeigt einen tqdm-basierten Fortschrittsbalken.
Unterstützt kein timeout oder chunksize, da executor.submit intern verwendet wird
**kwargs wird an tqdm übergeben.
"""
futures_list = []
for iterable in iterables:
futures_list += [executor.submit(fn, i) for i in iterable]
for f in tqdm(concurrent.futures.as_completed(futures_list), total=len(futures_list), **kwargs):
yield f.result()
# Verbindung zu Wasabi / S3 herstellen
s3 = boto3.resource('s3',
endpoint_url = 'https://s3.eu-central-1.wasabisys.com',
aws_access_key_id = 'MY_ACCESS_KEY',
aws_secret_access_key = 'MY_SECRET_KEY'
)
# Bucket-Objekt abrufen
boto_test_bucket = s3.Bucket('boto-test')
def create_s3_object(i, directory):
# Testdaten erstellen
buf = io.BytesIO()
buf.write(f"{i}".encode())
# Leseposition zurücksetzen. NICHT VERGESSEN, sonst sind alle hochgeladenen Dateien leer!
buf.seek(0)
# Datei hochladen
boto_test_bucket.upload_fileobj(buf, f"{directory}/{i}.txt")
for _ in tqdm_parallel_map(executor, lambda i: create_s3_object(i, directory="10k-Test-Objects"), range(1, 10001)):
passNicht vergessen, MY_ACCESS_KEY und MY_SECRET_KEY auszufüllen. Je nach Region und S3-kompatiblem Dienst muss möglicherweise eine andere Endpoint-URL anstelle von https://s3.eu-central-1.wasabisys.com verwendet werden.
Beachten, dass die Ausführung dieses Skripts, insbesondere beim Erstellen vieler Testdateien, viele Anfragen an den S3-Anbieter sendet und diese Anfragen je nach verwendetem Tarif teuer sein können. Wasabi beispielsweise berechnet keine Kosten für Anfragen, sondern für Speicher (mit einem Minimum von 1TB Speicher pro Monat, zum Zeitpunkt der Erstellung dieses Textes).
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow