Naudokite šiuos metodus, kad vienu metu paleistumėte kodą ir užtikrintumėte sklandesnę vartotojo patirtį.

Key Takeaways

  • Lygiagretumas ir lygiagretumas yra pagrindiniai skaičiavimo užduočių vykdymo principai, kurių kiekvienas turi savo ypatybes.
  • Lygiagretumas leidžia efektyviai panaudoti išteklius ir pagerinti programų reagavimą, o lygiagretumas yra labai svarbus siekiant optimalaus našumo ir mastelio.
  • „Python“ suteikia parinkčių, kaip tvarkyti lygiagretumą, pvz., sriegimą ir asinchroninį programavimą su asyncio, taip pat lygiagretumą naudojant kelių apdorojimo modulį.

Lygiagretumas ir lygiagretumas yra du būdai, leidžiantys vienu metu paleisti kelias programas. „Python“ turi kelias užduotis vienu metu ir lygiagrečiai tvarkyti, o tai gali būti paini.

Ištirkite įrankius ir bibliotekas, skirtas tinkamai įgyvendinti Python lygiagretumą ir lygiagretumą, ir kaip jie skiriasi.

Lygiagretumo ir lygiagretumo supratimas

Lygiagretumas ir lygiagretumas reiškia du pagrindinius skaičiavimo užduočių vykdymo principus. Kiekvienas iš jų turi savo išskirtines savybes.

instagram viewer
  1. Lygiagretumas yra programos galimybė vienu metu valdyti kelias užduotis, nebūtinai jų vykdant tiksliai tuo pačiu metu. Ji sukasi aplink užduočių sujungimo idėją, perjungimą tarp jų taip, kad atrodo, kad tai vienu metu.
  2. LygiagretumasKita vertus, tai reiškia, kad kelias užduotis reikia atlikti lygiagrečiai. Paprastai jis naudojasi keli CPU branduoliai arba procesoriai. Paralelizmas užtikrina tikrą vienalaikį vykdymą, leidžiantį greičiau atlikti užduotis ir puikiai tinka daug skaičiavimo reikalaujančioms operacijoms.

Lygiagretumo ir lygiagretumo svarba

Negalima pervertinti skaičiavimo lygiagretumo ir lygiagretumo poreikio. Štai kodėl svarbūs šie metodai:

  1. Išteklių panaudojimas: Lygiagretumas leidžia efektyviai panaudoti sistemos išteklius, užtikrinant, kad užduotys aktyviai progresuotų, o ne tuščiai lauktų išorinių išteklių.
  2. Reagavimas: Lygiagretumas gali pagerinti programų reagavimą, ypač tais atvejais, kai naudojamos vartotojo sąsajos arba žiniatinklio serveriai.
  3. Spektaklis: Lygiagretumas yra labai svarbus norint pasiekti optimalų našumą, ypač atliekant su procesoriaus susijusias užduotis, pvz., sudėtingus skaičiavimus, duomenų apdorojimą ir modeliavimą.
  4. Mastelio keitimas: ir lygiagretumas, ir lygiagretumas yra būtini kuriant keičiamo dydžio sistemas.
  5. Atsparumas ateičiai: Kadangi aparatinės įrangos tendencijos ir toliau teikia pirmenybę kelių branduolių procesoriams, galimybė panaudoti lygiagretumą taps vis labiau reikalinga.

Lygiagretumas Python

Lygiagretumą Python galite pasiekti naudodami sriegimą ir asinchroninį programavimą su asyncio biblioteka.

Sriegimas Python

Threading yra Python lygiagretumo mechanizmas, leidžiantis kurti ir valdyti užduotis viename procese. Gijos tinka tam tikro tipo užduotims, ypač toms, kurios yra susietos su įvestimi / išvestimi ir gali būti naudingos tuo pačiu metu.

Python'as sriegimas modulis suteikia aukšto lygio sąsają gijų kūrimui ir valdymui. Nors GIL (Global Interpreter Lock) riboja gijas, kalbant apie tikrąjį lygiagretumą, jos vis tiek gali pasiekti lygiagretumą efektyviai supainiodamos užduotis.

Toliau pateiktame kode parodytas lygiagretumo, naudojant gijas, įgyvendinimo pavyzdys. Jis naudoja Python užklausų biblioteką, kad išsiųstų HTTP užklausą – įprastą I/O blokavimo užduotį. Jis taip pat naudoja laiko modulis, skirtas apskaičiuoti vykdymo laiką.

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")

Vykdydami šią programą turėtumėte pamatyti, kiek spartesnės yra gijos užklausos nei nuoseklios užklausos. Nors skirtumas yra tik sekundės dalis, jūs aiškiai jaučiate našumo pagerėjimą, kai naudojate gijas įvesties / išvesties užduotims.

Asinchroninis programavimas su Asyncio

asyncio suteikia įvykių kilpą, kuri valdo asinchronines užduotis, vadinamas korutinėmis. Korutinos yra funkcijos, kurias galite pristabdyti ir tęsti, todėl jos puikiai tinka įvesties/išvesties užduotims. Biblioteka ypač naudinga tais atvejais, kai užduotys apima laukimą išorinių išteklių, pvz., tinklo užklausų.

Galite modifikuoti ankstesnį užklausos siuntimo pavyzdį, kad jis veiktų 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")

Naudodami kodą galite atsisiųsti tinklalapius tuo pačiu metu naudodami asyncio ir pasinaudoti asinchroninių I/O operacijų privalumais. Tai gali būti efektyviau nei įvesties/išvesties užduočių sujungimas.

Lygiagretumas Python

Lygiagretumą galite įgyvendinti naudodami Python'as daugiafunkcinis apdorojimas modulis, kuri leidžia išnaudoti visas kelių branduolių procesorių teikiamas galimybes.

Daugiafunkcis apdorojimas Python

Python'as daugiafunkcinis apdorojimas modulis suteikia galimybę pasiekti lygiagretumą kuriant atskirus procesus, kurių kiekvienas turi savo Python interpretatorių ir atminties erdvę. Tai veiksmingai apeina Global Interpreter Lock (GIL), todėl jis tinka procesoriaus užduotims.

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()

Šiame pavyzdyje daugiafunkcinis apdorojimas sukuria kelis procesus, leidžiančius atsisiuntimo_url funkcija veikia lygiagrečiai.

Kada naudoti lygiagretumą arba lygiagretumą

Pasirinkimas tarp lygiagretumo ir lygiagretumo priklauso nuo jūsų užduočių pobūdžio ir turimų aparatinės įrangos išteklių.

Lygiagretumą galite naudoti atlikdami su I/O susijusias užduotis, pvz skaitymas ir rašymas į failus arba teikiant tinklo užklausas ir kai atminties apribojimai kelia susirūpinimą.

Naudokite daugialypį apdorojimą, kai turite su procesoriaus susietas užduotis, kurioms gali būti naudingas tikrasis lygiagretumas, ir kai užduotys yra tvirtai atskirtos, kai vienos užduoties gedimas neturėtų turėti įtakos kitoms.

Pasinaudokite lygiagretumo ir lygiagretumo pranašumais

Lygiagretumas ir lygiagretumas yra veiksmingi būdai pagerinti Python kodo reagavimą ir našumą. Svarbu suprasti šių sąvokų skirtumus ir pasirinkti efektyviausią strategiją.

„Python“ siūlo įrankius ir modulius, kurių jums reikia, kad jūsų kodas būtų veiksmingesnis taikant lygiagretumą arba lygiagretumą, neatsižvelgiant į tai, ar dirbate su procesoriumi, ar įvesties / išvesties procesais.