Tartalomjegyzék
Kulcs elvitelek
- A párhuzamosság és a párhuzamosság a számítási feladatok végrehajtásának alapelvei, és mindegyiknek megvannak a maga sajátosságai.
- A párhuzamosság lehetővé teszi az erőforrások hatékony kihasználását és az alkalmazások jobb válaszkészségét, míg a párhuzamosság kulcsfontosságú az optimális teljesítmény és méretezhetőség szempontjából.
- A Python lehetőségeket biztosít a párhuzamosság kezelésére, mint például a szálfűzés és az aszinkron programozás asyncioval, valamint a párhuzamosság a többfeldolgozó modul használatával.
A párhuzamosság és a párhuzamosság két olyan technika, amely lehetővé teszi több program egyidejű futtatását. A Python számos lehetőséget kínál a feladatok egyidejű és párhuzamos kezelésére, ami zavaró lehet.
Fedezze fel a rendelkezésre álló eszközöket és könyvtárakat a párhuzamosság és párhuzamosság Pythonban való megfelelő megvalósításához, és hogy miben különböznek egymástól.
Az egyidejűség és a párhuzamosság megértése
A párhuzamosság és a párhuzamosság a számítási feladatok végrehajtásának két alapelvére utal. Mindegyiknek megvannak a sajátosságai.
Az egyidejűség és a párhuzamosság jelentősége
A párhuzamosság és a párhuzamosság szükségességét a számítástechnikában nem lehet túlhangsúlyozni. Ezért fontosak ezek a technikák:
Párhuzamosság Pythonban
Egyidejűséget érhet el a Pythonban a szálfűzéssel és az aszinkron programozással az asyncio könyvtárral.
Threading Pythonban
A Threading egy Python párhuzamossági mechanizmus, amely lehetővé teszi feladatok létrehozását és kezelését egyetlen folyamaton belül. A szálak bizonyos típusú feladatokhoz alkalmasak, különösen azokhoz, amelyek I/O-kötöttek, és előnyösek lehetnek a párhuzamos végrehajtásból.
Python szálfűző modulja magas szintű felületet biztosít a szálak létrehozásához és kezeléséhez. Míg a GIL (Global Interpreter Lock) korlátozza a szálakat a valódi párhuzamosság szempontjából, a feladatok hatékony interleavelésével mégis képesek párhuzamosságot elérni.
Az alábbi kód példát mutat be a szálak használatával történő párhuzamosság megvalósítására. A Python kéréskönyvtárat használja egy HTTP-kérelem küldésére, amely egy gyakori I/O blokkoló feladat. Az időmodult is használja a végrehajtási idő kiszámításához.
import requests
import time
import threadingurls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]
def download_url(url):
response = requests.get(url)
print(f"Downloaded {url} - Status Code: {response.status_code}")
start_time = time.time()for url in urls:
download_url(url)end_time = time.time()
print(f"Sequential download took {end_time - start_time:.2f} seconds\n")
start_time = time.time()
threads = []for url in urls:
thread = threading.Thread(target=download_url, args=(url,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()end_time = time.time()
print(f"Threaded download took {end_time - start_time:.2f} seconds")
A program futtatásakor látnia kell, mennyivel gyorsabbak a szálas kérések, mint a szekvenciális kérések. Bár a különbség csak a másodperc töredéke, világosan érzékelheti a teljesítménynövekedést, ha szálakat használ I/O-kötött feladatokhoz.
Aszinkron programozás Asyncioval
asyncio eseményhurkot biztosít, amely korutinoknak nevezett aszinkron feladatokat kezel. A korutinok olyan funkciók, amelyeket szüneteltethet és folytathat, így ideálisak I/O-hoz kötött feladatokhoz. A könyvtár különösen hasznos olyan helyzetekben, amikor a feladatok külső erőforrásokra, például hálózati kérésekre várnak.
Módosíthatja az előző kérés-küldési példát, hogy az asyncioval működjön:
import asyncio
import aiohttp
import timeurls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]
async def download_url(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
content = await response.text()
print(f"Downloaded {url} - Status Code: {response.status}")
async def main():
tasks = [download_url(url) for url in urls]
await asyncio.gather(*tasks)start_time = time.time()
asyncio.run(main())end_time = time.time()
print(f"Asyncio download took {end_time - start_time:.2f} seconds")
A kód használatával párhuzamosan tölthet le weboldalakat az asyncio használatával, és kihasználhatja az aszinkron I/O műveletek előnyeit. Ez hatékonyabb lehet, mint az I/O-hoz kötött feladatok szálfűzése.
Párhuzamosság a Pythonban
A párhuzamosságot a segítségével valósíthatja meg A Python többfeldolgozó moduljaamely lehetővé teszi a többmagos processzorok teljes kihasználását.
Többszörös feldolgozás Pythonban
A Python többfeldolgozó modulja lehetőséget biztosít a párhuzamosság elérésére különálló folyamatok létrehozásával, amelyek mindegyike saját Python értelmezővel és memóriaterülettel rendelkezik. Ez hatékonyan megkerüli a Global Interpreter Lock (GIL) funkciót, így alkalmas a CPU-hoz kötött feladatokra.
import requests
import multiprocessing
import timeurls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]
def download_url(url):
response = requests.get(url)
print(f"Downloaded {url} - Status Code: {response.status_code}")def main():
num_processes = len(urls)
pool = multiprocessing.Pool(processes=num_processes)start_time = time.time()
pool.map(download_url, urls)
end_time = time.time()
pool.close()
pool.join()print(f"Multiprocessing download took {end_time-start_time:.2f} seconds")
main()
Ebben a példában a többfeldolgozás több folyamatot eredményez, lehetővé téve a download_url függvény párhuzamos futtatását.
Mikor kell használni a párhuzamosságot vagy a párhuzamosságot?
Az egyidejűség és a párhuzamosság közötti választás a feladatok természetétől és a rendelkezésre álló hardvererőforrásoktól függ.
Használhatja a párhuzamosságot, amikor I/O-hoz kötött feladatokat hajt végre, mint például fájlok olvasása és írása vagy hálózati kérések, és amikor a memóriakorlátozás aggodalomra ad okot.
Használja a többfeldolgozást, ha olyan CPU-hoz kötött feladatai vannak, amelyek profitálhatnak a valódi párhuzamosságból, és ha a feladatok között robusztus elkülönülés van, ahol az egyik feladat hibája nem érintheti a többit.
Használja ki az egyidejűséget és a párhuzamosságot
A párhuzamosság és a párhuzamosság hatékony módja a Python-kód válaszkészségének és teljesítményének javításának. Fontos megérteni e fogalmak közötti különbségeket, és kiválasztani a leghatékonyabb stratégiát.
A Python kínálja azokat az eszközöket és modulokat, amelyekre szükség van a kód hatékonyabbá tételéhez párhuzamosság vagy párhuzamosság révén, függetlenül attól, hogy CPU-hoz vagy I/O-hoz kötött folyamatokkal dolgozik.