Streamlit Uygulamanızı Selenium ve GitHub Actions ile Aktif Tutma
Streamlit uygulamalarınızın sürekli çalışır durumda kalmasını sağlamak, özellikle gerçek zamanlı veri güncellemeleri veya sürekli erişilebilirliğin önemli olduğu durumlarda kritik öneme sahiptir. Bu makalede, Selenium ve GitHub Actions'ı kullanarak Streamlit uygulamalarınızı nasıl sürekli aktif tutabileceğinizi adım adım açıklayacağız. Uygulamalarınızın kesintisiz çalışmasını sağlayarak, kullanıcı deneyimini optimize edeceğiz ve verilerinizin her zaman güncel kalmasını garanti altına alacağız.
Streamlit Uygulamaları Neden Uyku Moduna Geçer?
Bulut tabanlı platformlarda barındırılan Streamlit uygulamaları, belirli bir süre boyunca aktif kullanılmadığında, kaynakları korumak amacıyla otomatik olarak uyku moduna geçerler. Bu durum, uygulamanın yanıt vermemesine ve kullanıcıların erişimini engellemesine neden olabilir. Özellikle ücretsiz hosting çözümlerinde bu durum daha sık yaşanır. Bu nedenle, uygulamanızın sürekli aktif kalmasını sağlamak için bazı stratejiler uygulamanız gereklidir.
Bu sorunun çözümü için çeşitli yöntemler mevcuttur. Örneğin, her birkaç dakikada bir uygulamayı ziyaret eden bir cron job kullanabilirsiniz. Ancak bu yöntem, özellikle yoğun trafik durumlarında, istenmeyen yüklenmeler oluşturabilir. Daha verimli bir çözüm ise, Selenium ve GitHub Actions'ı entegre etmektir. Bu yöntem, otomasyon sayesinde kaynakların daha verimli kullanılmasını sağlar ve uygulamanızın kesintisiz çalışmasını garanti eder.
Selenium ile Streamlit Uygulamasını Periyodik Olarak Ziyaret Etme
Selenium'u Kurma ve Temel Kullanımı
Selenium, web tarayıcılarını otomatikleştirmek için kullanılan güçlü bir araçtır. Python ile entegre edilebilir ve web uygulamalarıyla etkileşim kurmak için kullanılır. Öncelikle, Selenium'u ve gerekli tarayıcı sürücüsünü (örneğin, ChromeDriver için Chrome) sisteminize kurmanız gerekir. Bunun için pip kullanabilirsiniz:
bash
pip install selenium
Ardından, ilgili tarayıcı sürücüsünü indirmeniz ve sisteminizin PATH değişkenine eklemeniz gerekir. Daha sonra, basit bir Selenium betiği yazabilirsiniz. Aşağıdaki örnek kod, belirtilen URL'yi açar ve sayfayı kapatır:
python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
service = ChromeService(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.get("https://www.ornekstreamlituygulamasi.com") # Streamlit uygulamanızın URL'si
driver.quit()
Selenium ile Streamlit Uygulamasını Aktif Tutma
Bu basit betiği düzenleyerek, Streamlit uygulamanızı düzenli aralıklarla ziyaret eden bir betik oluşturabilirsiniz. Örneğin, her 5 dakikada bir uygulamayı ziyaret eden bir betik aşağıdaki gibi olabilir:
python
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
service = ChromeService(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
while True:
try:
driver.get("https://www.ornekstreamlituygulamasi.com") # Streamlit uygulamanızın URL'si
time.sleep(300) # 5 dakika bekle
except Exception as e:
print(f"Hata oluştu: {e}")
driver.quit()
break # Hata durumunda döngüyü kır
GitHub Actions ile Otomasyonu Sağlama
GitHub Actions'ı Tanıtma
GitHub Actions, kodunuzun her aşamasını otomatikleştirmenize olanak tanıyan bir CI/CD (Sürekli Entegrasyon/Sürekli Teslimat) platformudur. Selenium betiğinizi GitHub Actions ile çalıştırarak, uygulamanızın sürekli olarak aktif kalmasını sağlayabilirsiniz. Öncelikle, GitHub deponuzda bir .github/workflows klasörü oluşturmanız ve içine bir YAML dosyası eklemeniz gerekir.
GitHub Actions YAML Dosyası
Aşağıdaki örnek YAML dosyası, her 5 dakikada bir Selenium betiğini çalıştırır:
yaml
name: Keep Streamlit App Awake
on:
schedule:
- cron: '*/5 * * * *' # Her 5 dakikada bir çalıştır
jobs:
keep-awake:
runs-on: ubuntu-latest
steps:
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.x'
- name: Install dependencies
run: pip install selenium webdriver-manager
- name: Run Selenium script
run: python keep_awake.py
Bu dosyada, cron ifadesi, betiğin her 5 dakikada bir çalıştırılmasını sağlar. jobs bölümü ise, çalıştırılacak işlemleri tanımlar. steps bölümü, her adımın nasıl gerçekleştirileceğini belirtir. keep_awake.py dosyası, daha önce yazdığımız Selenium betiğidir.
Dikkat: Bu YAML dosyasını GitHub deponuza eklemeden önce, keep_awake.py dosyasını da depoya eklemeniz ve https://www.ornekstreamlituygulamasi.com kısmını kendi Streamlit uygulamanızın URL'siyle değiştirmeniz gerekir. Uygulamanızın URL'sini doğru bir şekilde girmek çok önemlidir. Yanlış URL girerseniz GitHub Actions çalışmayabilir.
İleri Düzey Teknikler ve Optimizasyon
Daha Az Kaynak Tüketimi İçin Optimizasyonlar
Yukarıdaki yöntem, uygulamanızı aktif tutmak için etkili olsa da, kaynak tüketimini en aza indirmek için bazı optimizasyonlar yapılabilir. Örneğin, Selenium'da "headless" modu kullanılabilir. Bu mod, tarayıcının grafiksel arayüzünü göstermeden çalışmasını sağlar, böylece kaynak tüketimi önemli ölçüde azalır. Headless modunu etkinleştirmek için, webdriver.Chrome nesnesini oluştururken options parametresini kullanabilirsiniz:
python
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
options = Options()
options.add_argument("--headless=new") # Headless modu aktifleştir
service = ChromeService(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
# ... diğer kodlar ...
Hata Yönetimi ve Loglama
Gerçek dünya senaryolarında, beklenmedik hatalar oluşabilir. Bu nedenle, hata yönetimi ve loglama mekanizmaları uygulamak önemlidir. Hata durumunda, betiğin durmaması ve devam etmesi için try...except blokları kullanılabilir. Ayrıca, log dosyaları oluşturarak, betiğin çalışma durumunu izleyebilirsiniz.
python
import logging
# ... diğer kodlar ...
try:
# ... Selenium kodu ...
except Exception as e:
logging.error(f"Hata oluştu: {e}")
# Hata durumunda yapılacak işlemler
Farklı Tarayıcılar ve Sürücüler
Chrome dışında farklı tarayıcılar ve sürücüleri kullanabilirsiniz (örneğin, Firefox için geckodriver). Her tarayıcının kendine özgü sürücüsü vardır ve bunları doğru bir şekilde kurmanız gerekir. Selenium'un esnekliği sayesinde, uygulamanızın ihtiyaçlarına göre farklı tarayıcıları kullanabilirsiniz.
Gerçek Dünya Senaryoları ve Vaka Analizleri
E-ticaret Uygulaması
Bir e-ticaret uygulaması düşünün. Bu uygulama, gerçek zamanlı stok güncellemeleri ve sipariş takibi sağlamalıdır. Streamlit uygulaması uyku moduna geçtiğinde, kullanıcılar güncel bilgileri göremez ve bu da müşteri memnuniyetsizliğine yol açabilir. Selenium ve GitHub Actions ile uygulamayı sürekli aktif tutarak bu sorunun üstesinden gelebiliriz.
Finansal Veri Analizi Uygulaması
Bir finansal veri analizi uygulaması, sürekli olarak piyasa verilerini güncelleyen ve grafiksel olarak sunan bir Streamlit uygulaması olabilir. Uygulama uyku moduna geçtiğinde, güncel veriler gösterilmez ve bu da yanlış kararlara yol açabilir. Selenium ve GitHub Actions ile uygulamanın sürekli aktif kalmasını sağlayarak, doğru ve güncel verilere erişimi garanti altına alabilirsiniz.
Öğrenme Yol Haritası
Yeni Başlayanlar İçin
Selenium ve Python temellerini öğrenin. Basit bir Selenium betiği yazmayı deneyin. GitHub Actions'ın temel yapısını anlayın.
Orta Seviye
Daha karmaşık Selenium betikleri yazın. GitHub Actions'ı kullanarak basit bir otomasyon iş akışı oluşturun. Hata yönetimi ve loglama mekanizmaları uygulayın.
İleri Seviye
Headless modunu ve diğer gelişmiş Selenium özelliklerini kullanın. Karmaşık GitHub Actions iş akışları oluşturun. Farklı tarayıcılar ve sürücüleri deneyin. Performans optimizasyonları uygulayın.
Sonuç
Bu makalede, Selenium ve GitHub Actions kullanarak Streamlit uygulamalarınızı sürekli aktif tutmanın farklı yöntemlerini inceledik. Uygulama ihtiyaçlarınıza en uygun yöntemi seçerek, uygulamanızın kesintisiz çalışmasını ve kullanıcı deneyimini optimize edebilirsiniz. Daha fazla bilgi için https://fatihsoysal.com inceleyebilirsiniz.
Sıkça Sorulan Sorular
- Selenium'un alternatifleri var mı? Evet, Playwright ve Puppeteer gibi alternatifler mevcuttur.
- GitHub Actions ücretli mi? GitHub Actions'ın ücretsiz bir katmanı bulunmaktadır, ancak bazı limitler vardır.
- Uygulamayı ne kadar sıklıkla ziyaret etmeliyim? Bu, uygulamanızın ihtiyaçlarına bağlıdır. Çok sık ziyaret etmek kaynak tüketimini artırabilir.
- Hatalar nasıl yönetilir?
try...exceptblokları ve loglama kullanarak hataları yakalayabilir ve yönetebilirsiniz. - Başka hangi optimizasyonlar yapılabilir? Paralelleştirme ve kaynak yönetimi teknikleri kullanılarak performans daha da iyileştirilebilir.
Yazar: Fatih Soysal
