Voici mes tests en synchrone + multiplexed + stream=True
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def download_mp3(url, filename):
with Session(multiplexed=True) as session:
response = session.get(url, stream=True)
if response.status_code == 200:
with open(filename, 'wb') as f:
for chunk in response.iter_content(1024):
f.write(chunk)
def main():
for url, filename in mp3_links:
download_mp3(url, filename)
start = perf_counter()
main()
print(f"time : {perf_counter() - start}") |
time : 24.594879195999965
équivalent à asynchrone + stream=True
En synchrone avec multiplexed et stream=False, j'ai des erreurs de timeout, j'ai dû modifier un peu le code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| def download_mp3(url, filename):
try:
with Session(multiplexed=True) as session:
response = session.get(url, stream=False, timeout=60)
if response.status_code == 200:
with open(filename, 'wb') as f:
for chunk in response.iter_content(1024):
f.write(chunk)
except RequestException as e:
print(f"Erreur lors du téléchargement de {url}: {e}")
def main():
for url, filename in mp3_links:
download_mp3(url, filename)
start = perf_counter()
main()
print(f"time : {perf_counter() - start}") |
time : 17.427481426002487
EDIT: Petite précision, les requêtes se font sur le même serveur et je pense que le multiplexage selon ce que j'ai pu lire dépend des capacités du serveur à pouvoir gérer les connexions multiplexées.
Du coup j'ai testé à nouveau aiohttp pour être sur la même plage horaire niveau débit
time : 5.9470249519981735
J'attends tes remarques pour l'optimisation si possible
Partager