1. Asenkron Programlama
Senkron vs Asenkron
Senkron programlama: İşlemler sırasıyla çalışır. Bir işlem tamamlanmadan diğerine geçilmez. Küçük projelerde sorun yaratmaz, ancak büyük projelerde performans kaybına neden olabilir.
Asenkron programlama: Bir işlem beklenirken diğer işlemlerin devam etmesine izin verir. Özellikle I/O işlemleri sırasında faydalıdır.
Senkron Örnek
import time
def sync_task():
print("Görev 1 başlıyor...")
time.sleep(2)
print("Görev 1 tamamlandı.")
print("Görev 2 başlıyor...")
time.sleep(2)
print("Görev 2 tamamlandı.")
sync_task()
Asenkron Örnek
import asyncio
async def async_task():
print("Görev 1 başlıyor...")
await asyncio.sleep(2)
print("Görev 1 tamamlandı.")
print("Görev 2 başlıyor...")
await asyncio.sleep(2)
print("Görev 2 tamamlandı.")
asyncio.run(async_task())
await, belirli bir işlemin tamamlanmasını bekler ancak diğer görevler
bu süreçte devam edebilir.
2. Threading ve Multiprocessing
Threading: Bir uygulamanın farklı görevlerini aynı zamanda çalıştırır. Aynı hafıza alanını paylaşır. Hafif ve hızlıdır.
Multiprocessing: Farklı işlemcilerde işlemleri gerçekleştirir. Her işlemin kendi belleği vardır. Daha güvenli ama daha fazla kaynak tüketir.
Threading Örneği
import threading
import time
def print_numbers():
for i in range(5):
print(i)
time.sleep(1)
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_numbers)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
Multiprocessing Örneği
import multiprocessing
import time
def print_numbers():
for i in range(5):
print(i)
time.sleep(1)
if __name__ == '__main__':
process1 = multiprocessing.Process(target=print_numbers)
process2 = multiprocessing.Process(target=print_numbers)
process1.start()
process2.start()
process1.join()
process2.join()
3. asyncio Modülü
asyncio, birden fazla asenkron işlemi aynı anda çalıştırmak ve yönetmek
için kullanılır. asyncio.gather() ile birden fazla görev paralel
yürütülebilir.
import asyncio
async def task_1():
print("Görev 1 başlıyor...")
await asyncio.sleep(2)
print("Görev 1 tamamlandı.")
async def task_2():
print("Görev 2 başlıyor...")
await asyncio.sleep(1)
print("Görev 2 tamamlandı.")
async def main():
await asyncio.gather(task_1(), task_2())
asyncio.run(main())
task_1 ve task_2 aynı anda çalışır, ikisi de bitene kadar main
beklemez.
4. Veritabanı İşlemleri
SQLite ile Temel Kullanım
SQLite, Python’a yerleşik gelen hafif bir veritabanıdır. Tek dosyada çalışır, sunucuya ihtiyaç duymaz.
import sqlite3
# Veritabanına bağlan
conn = sqlite3.connect('example.db')
c = conn.cursor()
# Tablo oluşturma
c.execute('''CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
)''')
# Veri ekleme
c.execute("INSERT INTO users (name, age) VALUES ('Ejder', 28)")
conn.commit()
# Veri çekme
c.execute("SELECT * FROM users")
print(c.fetchall())
# Bağlantıyı kapatma
conn.close()
PostgreSQL Bağlantısı
PostgreSQL gibi ilişkisel veritabanlarına bağlanmak için psycopg2
kütüphanesi kullanılır:
import psycopg2
conn = psycopg2.connect(
database="your_db",
user="your_user",
password="your_password",
host="localhost",
port="5432"
)
c = conn.cursor()
c.execute("SELECT * FROM users")
print(c.fetchall())
conn.close()
ORM: SQL sorguları yerine Python sınıfları üzerinden veritabanı işlemleri yapmak için SQLAlchemy kullanılabilir — büyük projelerde kodu daha sürdürülebilir hale getirir.
5. API Entegrasyonu
requests ile GET İsteği
import requests
response = requests.get("https://jsonplaceholder.typicode.com/posts")
if response.status_code == 200:
data = response.json()
print(data)
else:
print(f"Bir hata oluştu: {response.status_code}")
HTTP Metotları
- GET — Veri almak için
- POST — Sunucuya veri göndermek
- PUT — Mevcut bir veriyi güncellemek
- DELETE — Mevcut bir veriyi silmek
POST İsteği
import requests
payload = {
'title': 'Python Bootcamp',
'body': 'Bu, bir API POST isteği örneğidir.',
'userId': 1
}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=payload)
if response.status_code == 201:
print(f"Veri başarıyla eklendi: {response.json()}")
else:
print(f"Hata: {response.status_code}")
API Authentication
Çoğu API, veri erişimini sınırlandırmak için kimlik doğrulama gerektirir.
import requests
api_key = "your_api_key"
headers = {"Authorization": f"Bearer {api_key}"}
response = requests.get("https://api.example.com/data", headers=headers)
if response.status_code == 200:
print(response.json())
else:
print(f"Hata: {response.status_code}")
6. Web Scraping
BeautifulSoup ile HTML Parsing
import requests
from bs4 import BeautifulSoup
# Web sayfasını çekme
url = "https://example.com"
response = requests.get(url)
# HTML'i parse etme
soup = BeautifulSoup(response.text, "html.parser")
# Belirli bir HTML elemanını çekme
title = soup.find('h1').text
print(f"Başlık: {title}")
# Tüm linkleri listeleme
links = soup.find_all('a')
for link in links:
print(link.get('href'))
Selenium ile Dinamik Sitelerden Veri
Bazı web siteleri içeriklerini JavaScript ile dinamik yükler. Bu durumlarda Selenium kullanılır:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
# Sayfa başlığı
title = driver.title
print(f"Sayfa Başlığı: {title}")
# Bir elemanı tıklama
element = driver.find_element_by_id("button_id")
element.click()
driver.quit()
Daha detaylı web scraping örnekleri için BeautifulSoup Rehberi blog yazıma göz atabilirsin.
7. Pandas ile Veri İşleme
Pandas, veri analizinde en yaygın kullanılan kütüphanedir. Veriler DataFrame’lerle temsil edilir.
import pandas as pd
# CSV dosyasını okuma
df = pd.read_csv("data.csv")
# İlk 5 satırı görüntüleme
print(df.head())
# Veri filtreleme
filtered_data = df[df['Age'] > 30]
print(filtered_data)
# Veri gruplama
grouped_data = df.groupby('Department')['Salary'].mean()
print(grouped_data)
8. Veri Görselleştirme
Matplotlib
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 11, 12, 13, 14]
plt.plot(x, y)
plt.xlabel('X Ekseni')
plt.ylabel('Y Ekseni')
plt.title('Basit Çizgi Grafiği')
plt.show()
Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Örnek veri kümesi
df = sns.load_dataset("iris")
# Pair plot
sns.pairplot(df, hue="species")
plt.show()
Günün Özeti
Bugün Python’un en güçlü yanlarına dokunduk:
- Asenkron programlama —
async/await,asyncio - Paralel çalışma — threading vs multiprocessing
- Veritabanı işlemleri — SQLite ve PostgreSQL
- API entegrasyonu —
requestsile REST API - Web scraping — BeautifulSoup ve Selenium
- Veri işleme — pandas DataFrame’leri
- Görselleştirme — Matplotlib ve Seaborn
Yarın Gün 5’te iteratorlar, generatorlar, context managerlar, decoratorlar ve gelişmiş veri yapıları ile finalize edeceğiz.