Használja ezeket a technikákat a kód egyidejű futtatásához, és gördülékenyebb felhasználói élményt biztosít.

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.

instagram viewer

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.

  1. Egyidejűség a program azon képessége, hogy egyszerre több feladatot is kezeljen anélkül, hogy azokat pontosan ugyanabban az időben hajtaná végre. A feladatok egymásba ágyazásának gondolata körül forog, a közöttük olyan módon történő váltás, amely egyszerre jelenik meg.
  2. Párhuzamosságmásrészt több feladat tényleges párhuzamos végrehajtását jelenti. Általában kihasználja több CPU mag vagy processzor. A párhuzamosság valódi egyidejű végrehajtást tesz lehetővé, lehetővé téve a feladatok gyorsabb végrehajtását, és kiválóan alkalmas a számításigényes műveletekhez.

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:

  1. Erőforrás-felhasználás: A párhuzamosság lehetővé teszi a rendszererőforrások hatékony kihasználását, biztosítva, hogy a feladatok aktívan haladjanak előre, ahelyett, hogy tétlenül várnának a külső erőforrásokra.
  2. Fogékonyság: A párhuzamosság javíthatja az alkalmazások válaszkészségét, különösen a felhasználói felületeket vagy webszervereket érintő forgatókönyvekben.
  3. Teljesítmény: A párhuzamosság kulcsfontosságú az optimális teljesítmény eléréséhez, különösen a CPU-hoz kötött feladatoknál, mint például az összetett számítások, adatfeldolgozás és szimulációk.
  4. Méretezhetőség: A párhuzamosság és a párhuzamosság egyaránt elengedhetetlen a méretezhető rendszerek felépítéséhez.
  5. Jövőbiztosság: Mivel a hardvertrendek továbbra is a többmagos processzorokat részesítik előnyben, a párhuzamosság kihasználásának képessége egyre szükségesebbé válik.

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 befűzés modul 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. Azt is használja a időmodul a végrehajtási idő kiszámításához.

import requests
import time
import threading

urls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]

# function to request a URL
defdownload_url(url):
response = requests.get(url)
print(f"Downloaded {url} - Status Code: {response.status_code}")

# Execute without threads and measure execution time
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")

# Execute with threads, resetting the time to measure new execution time
start_time = time.time()
threads = []

for url in urls:
thread = threading.Thread(target=download_url, args=(url,))
thread.start()
threads.append(thread)

# Wait for all threads to complete
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 működjön asyncio:

import asyncio
import aiohttp
import time

urls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]

# asynchronous function to request URL
asyncdefdownload_url(url):
asyncwith aiohttp.ClientSession() as session:
asyncwith session.get(url) as response:
content = await response.text()
print(f"Downloaded {url} - Status Code: {response.status}")

# Main asynchronous function
asyncdefmain():
# Create a list of tasks to download each URL concurrently
tasks = [download_url(url) for url in urls]

# Gather and execute the tasks concurrently
await asyncio.gather(*tasks)

start_time = time.time()

# Run the main asynchronous function
asyncio.run(main())

end_time = time.time()

print(f"Asyncio download took {end_time - start_time:.2f} seconds")

A kód használatával egyidejűleg letölthet weboldalakat asyncio és kihasználja az aszinkron I/O műveleteket. 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 Python több feldolgozás modul, amely lehetővé teszi a többmagos processzorok teljes kihasználását.

Többszörös feldolgozás Pythonban

Python több feldolgozás modul lehetőséget biztosít a párhuzamosság elérésére különálló folyamatok létrehozásával, mindegyik saját Python értelmezővel és memóriaterülettel. 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 time

urls = [
'https://www.google.com',
'https://www.wikipedia.org',
'https://www.makeuseof.com',
]

# function to request a URL
defdownload_url(url):
response = requests.get(url)
print(f"Downloaded {url} - Status Code: {response.status_code}")

defmain():
# Create a multiprocessing pool with a specified number of processes
num_processes = len(urls)
pool = multiprocessing.Pool(processes=num_processes)

start_time = time.time()
pool.map(download_url, urls)
end_time = time.time()

# Close the pool and wait for all processes to finish
pool.close()
pool.join()

print(f"Multiprocessing download took {end_time-start_time:.2f} seconds")

main()

Ebben a példában több feldolgozás több folyamatot hoz létre, lehetővé téve a letöltés_url funkció párhuzamos futtatásához.

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 kezel, mint pl fájlok olvasása és írása vagy hálózati kéréseket küld, é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 a 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.