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ı

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:

Yarın Gün 5’te iteratorlar, generatorlar, context managerlar, decoratorlar ve gelişmiş veri yapıları ile finalize edeceğiz.