-
Introducere în programarea asincronă
- Conceptul de programare asincronă
- Diferența dintre programarea sincronă și cea asincronă
- Scenarii de utilizare a programării asincrone
-
Biblioteca asyncio în Python
- Prezentarea bibliotecii asyncio
- Crearea și gestionarea corutinelor și a task-urilor
- Utilizarea buclelor de evenimente pentru executarea asincronă a codului
-
Operarea cu I/O asincron
- Introducere în I/O asincron
- Lucrul cu socket-uri asincrone
- Implementarea serverelor și a clienților asincroni
-
Biblioteca aiohttp
- Prezentarea bibliotecii aiohttp
- Crearea de servere și clienți HTTP asincroni
- Lucrul cu sesiuni și conexiuni HTTP asincrone
-
Încorporarea programării asincrone în aplicații reale
- Exemple de scenarii în care programarea asincronă este utilă
- Implementarea de aplicații web asincrone
- Îmbunătățirea performanței aplicațiilor prin utilizarea programării asincrone
-
Gestionarea erorilor și a excepțiilor în programarea asincronă
- Identificarea și tratarea erorilor comune în programarea asincronă
- Utilizarea blocurilor try-except în corutine și task-uri asincrone
Exemple și exerciții pentru fiecare subpunct:
Exemplu: Utilizarea corutinelor și a buclelor de evenimente
import asyncio
async def say_hello():
print("Hello")
await asyncio.sleep(1)
print("World!")
async def main():
task = asyncio.create_task(say_hello())
await task
asyncio.run(main())
Exercițiu:
Creați o corutină care să efectueze o operație asincronă, cum ar fi o întârziere de timp, și să afișeze un mesaj după finalizarea acesteia.
Exemplu: Implementarea unui server TCP asincron
import asyncio
async def handle_client(reader, writer):
data = await reader.read(100)
message = data.decode()
addr = writer.get_extra_info("peername")
print(f"Mesaj primit de la {addr}: {message}")
response = "Mesaj primit"
writer.write(response.encode())
await writer.drain()
writer.close()
async def main():
server = await asyncio.start_server(handle_client, "localhost", 12345)
addr = server.sockets[0].getsockname()
print(f"Server asincron pornit la adresa {addr}")
async with server:
await server.serve_forever()
asyncio.run(main())
Exercițiu:
Creați un server TCP asincron care să accepte și să gestioneze multiple conexiuni simultan.
Exemplu: Utilizarea bibliotecii aiohttp pentru a efectua cereri HTTP asincrone
import aiohttp
import asyncio
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def main():
url = "https://example.com"
html = await fetch(url)
print(f"Conținutul paginii {url}:")
print(html)
asyncio.run(main())
Exercițiu:
Creați o corutină care să efectueze mai multe cereri HTTP asincrone către diferite site-uri web și să afișeze conținutul acestora.
Exemplu: Gestionarea erorilor în corutine asincrone
import asyncio
async def faulty_coroutine():
try:
await asyncio.sleep(1)
raise ValueError("A apărut o eroare!")
except ValueError as e:
print(f"Eroare tratată: {e}")
async def main():
task = asyncio.create_task(faulty_coroutine())
await task
asyncio.run(main())
Exercițiu:
Creați o corutină care să efectueze o operație asincronă și să trateze o excepție posibilă care ar putea apărea în timpul execuției.
Rezumat:
În această lecție, am discutat despre programarea asincronă avansată cu asyncio și biblioteca aiohttp. Am explorat conceptele de bază ale programării asincrone și am învățat cum să lucrăm cu corutine, task-uri și bucle de evenimente. De asemenea, am aprofundat operarea cu I/O asincron și am explorat cum să folosim biblioteca aiohttp pentru a realiza servere și clienți HTTP asincroni. În final, am discutat despre gestionarea erorilor și a excepțiilor în programarea asincronă.