Kodu aynı anda çalıştırmak ve daha sorunsuz bir kullanıcı deneyimi sağlamak için bu teknikleri kullanın.

Temel Çıkarımlar

  • Eşzamanlılık ve paralellik, hesaplamada görev yürütmenin temel ilkeleridir ve her birinin kendine özgü özellikleri vardır.
  • Eşzamanlılık, verimli kaynak kullanımına ve uygulamaların gelişmiş yanıt verme hızına olanak tanırken paralellik, optimum performans ve ölçeklenebilirlik için çok önemlidir.
  • Python, iş parçacığı ve asyncio ile eşzamansız programlama gibi eşzamanlılığın yanı sıra çoklu işlem modülünü kullanarak paralellik yönetimi için seçenekler sunar.

Eşzamanlılık ve paralellik, birkaç programı aynı anda çalıştırmanıza izin veren iki tekniktir. Python'un görevleri eşzamanlı ve paralel olarak ele almak için birden fazla seçeneği vardır ve bu da kafa karıştırıcı olabilir.

Python'da eşzamanlılık ve paralelliği doğru bir şekilde uygulamak için mevcut araçları ve kitaplıkları ve bunların nasıl farklılaştığını keşfedin.

Eşzamanlılık ve Paralelliği Anlamak

Eşzamanlılık ve paralellik, bilgi işlemde görev yürütmenin iki temel ilkesini ifade eder. Her birinin kendine özgü özellikleri vardır.

instagram viewer

  1. Eşzamanlılık bir programın birden fazla görevi aynı anda yürütmesine gerek kalmadan aynı anda yönetme yeteneğidir. Eş zamanlı görünecek şekilde görevler arasında geçiş yaparak görevleri serpiştirme fikri etrafında döner.
  2. ParalellikÖte yandan, birden fazla görevi gerçekten paralel olarak yürütmeyi içerir. Genellikle yararlanır birden fazla CPU çekirdeği veya işlemci. Paralellik, gerçek eşzamanlı yürütmeyi sağlayarak görevleri daha hızlı gerçekleştirmenize olanak tanır ve yoğun hesaplama gerektiren işlemler için çok uygundur.

Eşzamanlılık ve Paralelliğin Önemi

Bilgi işlemde eşzamanlılık ve paralellik ihtiyacı abartılamaz. İşte bu tekniklerin önemi:

  1. Kaynak kullanımı: Eşzamanlılık, sistem kaynaklarının verimli kullanılmasına olanak tanır ve görevlerin harici kaynakları boşta beklemek yerine aktif olarak ilerlemesini sağlar.
  2. Cevaplanabilirlik: Eşzamanlılık, özellikle kullanıcı arayüzlerini veya web sunucularını içeren senaryolarda uygulamaların yanıt verme hızını artırabilir.
  3. Verim: Paralellik, özellikle karmaşık hesaplamalar, veri işleme ve simülasyonlar gibi CPU'ya bağlı görevlerde optimum performansa ulaşmak için çok önemlidir.
  4. Ölçeklenebilirlik: Ölçeklenebilir sistemler oluşturmak için hem eşzamanlılık hem de paralellik önemlidir.
  5. Geleceğe hazırlık: Donanım trendleri çok çekirdekli işlemcileri tercih etmeye devam ettikçe, paralellikten yararlanma yeteneği giderek daha gerekli hale gelecektir.

Python'da Eşzamanlılık

Python'da iş parçacığı ve eşzamansız programlamayı asyncio kitaplığıyla kullanarak eşzamanlılık elde edebilirsiniz.

Python'da iş parçacığı oluşturma

İş parçacığı oluşturma, görevleri tek bir işlem içinde oluşturmanıza ve yönetmenize olanak tanıyan bir Python eşzamanlılık mekanizmasıdır. İş parçacıkları, özellikle G/Ç'ye bağlı olan ve eşzamanlı yürütmeden yararlanabilen belirli görev türleri için uygundur.

Python'un iplik geçirme modül Konuları oluşturmak ve yönetmek için üst düzey bir arayüz sağlar. GIL (Global Interpreter Lock), iş parçacıklarını gerçek paralellik açısından sınırlandırırken, görevleri verimli bir şekilde serpiştirerek eşzamanlılık elde edebilirler.

Aşağıdaki kod, iş parçacıkları kullanılarak eşzamanlılığın örnek bir uygulamasını gösterir. Yaygın bir G/Ç engelleme görevi olan HTTP isteği göndermek için Python istek kitaplığını kullanır. Aynı zamanda şunları kullanır: yürütme süresini hesaplamak için zaman modülü.

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

Bu programı çalıştırdığınızda, iş parçacıklı isteklerin sıralı isteklerden ne kadar hızlı olduğunu görmelisiniz. Her ne kadar fark bir saniyenin çok küçük bir kısmı olsa da, iş parçacıklarını G/Ç'ye bağlı görevler için kullandığınızda performansın arttığını net bir şekilde anlayabilirsiniz.

Asyncio ile Asenkron Programlama

uyumsuz eşyordamlar adı verilen eşzamansız görevleri yöneten bir olay döngüsü sağlar. Eşyordamlar, duraklatabileceğiniz ve devam ettirebileceğiniz işlevlerdir; bu da onları G/Ç bağlantılı görevler için ideal kılar. Kitaplık, özellikle ağ istekleri gibi görevlerin harici kaynakları beklemeyi gerektirdiği senaryolar için kullanışlıdır.

Önceki istek gönderme örneğini çalışacak şekilde değiştirebilirsiniz uyumsuz:

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

Kodu kullanarak web sayfalarını aynı anda indirebilirsiniz. uyumsuz ve eşzamansız G/Ç işlemlerinin avantajlarından yararlanın. Bu, G/Ç'ye bağlı görevler için iş parçacığından daha verimli olabilir.

Python'da paralellik

Paralelliği kullanarak uygulayabilirsiniz. Python'un çoklu işlem modülBu da çok çekirdekli işlemcilerin tüm avantajlarından yararlanmanıza olanak tanır.

Python'da çoklu işlem

Python'un çoklu işlem modülü, her biri kendi Python yorumlayıcısına ve bellek alanına sahip ayrı süreçler oluşturarak paralellik elde etmenin bir yolunu sağlar. Bu, Küresel Yorumlayıcı Kilidini (GIL) etkili bir şekilde atlayarak CPU'ya bağlı görevler için uygun hale getirir.

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

Bu örnekte, çoklu işlem birden fazla işlemin ortaya çıkmasına olanak tanır indirme_url'si Paralel olarak çalışacak fonksiyon.

Eşzamanlılık veya Paralellik Ne Zaman Kullanılmalı?

Eşzamanlılık ve paralellik arasındaki seçim, görevlerinizin niteliğine ve mevcut donanım kaynaklarına bağlıdır.

Aşağıdaki gibi G/Ç bağlantılı görevlerle uğraşırken eşzamanlılığı kullanabilirsiniz: dosyalara okuma ve yazma veya ağ istekleri yaparken ve bellek kısıtlamaları endişe verici olduğunda.

Gerçek paralellikten yararlanabilecek CPU'ya bağlı görevleriniz olduğunda ve bir görevin başarısızlığının diğerlerini etkilememesi gereken görevler arasında sağlam bir izolasyona sahip olduğunuzda çoklu işlemeyi kullanın.

Eşzamanlılık ve Paralellikten Yararlanın

Paralellik ve eşzamanlılık, Python kodunuzun yanıt verebilirliğini ve performansını artırmanın etkili yollarıdır. Bu kavramlar arasındaki farkları anlamak ve en etkili stratejiyi seçmek önemlidir.

Python, CPU'ya bağlı veya G/Ç'ye bağlı işlemlerle çalışıyor olmanıza bakılmaksızın, kodunuzu eşzamanlılık veya paralellik yoluyla daha etkili hale getirmek için ihtiyacınız olan araçları ve modülleri sunar.