E-Bülten’e kayıt olun

E-Posta:



Öğrenmeye ve Geliştirmeye Devam

Artistanbul'da Python ve Celery stajı

Öğrenmeye ve Geliştirmeye Devam

Selamlar, Artistanbul’daki Python Geliştiricisi stajıma ve stajımla ilgili bloglar yazmaya kaldığım yerden devam ediyorum. Kütüphane yazmak, Celery ile asenkron programlama gibi bir zamanlar bana hayal gibi gelen işler yaptım.

Son yazdığım Stajda Yeni Görev: API Testleri yazısından sonra benim için o kadar çok şey oldu ki… Umarım olmayan yazma becerilerimin sınırlarını zorlayıp sizlere bu geçen zamanda olanları güzelce anlatabilirim.

 

Bir kütüphane geliştirdik

Şirketin geliştirdiği projelerin bir kısmında ortak olarak kullanılan bir API servisi var ancak bu API servisinin bir Python kütüphanesi bulunmuyordu. Bu sebeple kullanacağımız her endpoint’e istek atacak fonksiyonları ve dönen cevapları modelleyecek sınıfları bizim oluşturmamız gerekiyordu. Bir problem yok gibi gözüküyor değil mi? Gayet normal bir şekilde API’a istek atıp dönen cevabı daha rahat kullanmak için modellemekten bahsediyoruz altı üstü. Evet, yalnızca bir belki de iki proje yapacaksanız pek de büyütülecek bir sorun yok. Ama eğer ki daha fazla sayıda projede bu sistemi kullanmaya çalışırsanız işte o zaman sıkıntılar başlıyor. Neden mi? Çünkü olur da bu sistemi geliştirirken bir hata yaptıysanız, bu hatayı çözmek için aynı sistemi kullandığınız diğer tüm projeleri teker teker gezip aynı düzeltmeleri yapmanız gerekecek. Yeni bir projeye geçerken eski projeden o sistemi kopyala yapıştır ile düzgün bir şekilde yeni projeye entegre etmekten ya da o sistemi ilk kez kullanacak kişilere güzel bir dokümantasyon sunmanın zorluğundan bahsetmiyorum bile. Sonuç olarak birçok projede bu API servisini kullanmayı planladığımızdan artık daha da geç olmadan bu API servisinin kütüphanesini bizim geliştirmemiz gerekiyordu ki öyle de yaptık. Görev kâğıt üzerinde bana atandı ve hafiften bir endişe bastı. “Aman nasıl yaparım?”, “Yetişecek mi?”, “Hata yapıp projeleri patlatmasam bari!” gibi düşünceler kafamda dolanıyordu ki birkaç gün içerisinde bu gereksiz endişelerden kurtuldum. Dediğim gibi proje sadece kağıt üzerinde bana atanmıştı; yani aslında ekibin geri kalanı da bu proje üzerinde çalışmalar yapıyor, takıldığım noktalarda da bol bol yardımcı oluyordu.

Kütüphaneyi yazmayı bitirdik -bu işte bitirmek diye bir şeyin olmadığını hâlâ kavrayamamışım- sıra testlere, dokümantasyona ve CI/CD’ye geldi. Test kısmı kolaydı, sadece birazcık sabır ve bilgisayarı kapattıktan sonra gördüğüm self.assertEqual()‘ların gerçek olmadığını unutmamam gerekiyordu. Dokümantasyonu da güzel bir şekilde hazırladıktan sonra CI/CD’ye geçtim ve bu üçü arasında en keyif aldığım kısım o oldu. İşlerimizi otomatize etmeyeceksek yazılımcı olmanın anlamı ne değil mi? Her tag oluşturduğumuzda main branch’i paket haline getirip publish etmemiz gerekiyordu ki canım GitLab ile bu işi de zahmetsiz bir şekilde otomatize edebildik. Bu arada üzerinden 1 aydan fazla zaman geçmesine rağmen projeye her tag aldığımızda paketi otomatik bir şekilde publish etmesi bana hâlâ -basit bir işlem olmasına rağmen- çok etkileyici geliyor.

 

Celery ile asenkron programlama

Geliştirdiğimiz projelerimizin bazılarında bir endpoint’ten aldığı binlerce objeyi işleyecek ve hepsini teker teker başka bir endpoint’e gönderecek programlara ihtiyaç duyuyoruz. Bu işlemleri senkron bir şekilde yani bir görev bitmeden diğerine geçmeyecek şekilde yapmaya çalıştığımızda işin tamamlanması haliyle uzun sürüyor. Bu problemi ortadan kaldırmak için de programı asenkron yani aynı anda farklı görevleri çalıştırabilecek hale getirmemiz gerekiyordu ki, burada imdadımıza Celery yetişti. Celery bizim bu programımızın asenkron çalışmasını sağlayabilecek, kullanımı kolay, tatlı mı tatlı bir Python kütüphanesidir. Nasıl çalıştığını kaba taslak şöyle özetleyeyim: Öncelikle aynı anda kaç işlem yapacağını belirttiğiniz bir Worker Server çalıştırıyorsunuz, sonrasında da bu Worker Server’a iş atayan bir program oluşturup peş peşe “Hey Worker Server, şu şu fonksiyonu şu şu argümanlarla birlikte çalıştır bakayım.” diye mesajlar atıyorsunuz. Worker server da bu mesajları dinliyor ve görevleri kendi worker’ları arasında dağıtıp eşzamanlı bir şekilde çalışmalarını sağlıyor.

Projemizi Celery ile çalışabilir hale getirmek ne mutlu ki çok da zorlayıcı olmadı. Bunu hem Celery’nin hem de kendi projemizin güzelce hazırlanmış dokümantasyonlarına borçluyuz. Evet, belki 100 kez daha değineceğim bu dokümantasyon konusuna. Gerekirse “Canım Dokümantasyonum” diye bir dövme de yaptıracağım. Çünkü dokümantasyon yazmak, test yazmak gibi projenin ilerlemesini hızlandıracak çok faydalı alışkanlıklardan bir tanesi. Şanslıyım ki, Artistanbul dokümantasyona önem veren bir ekibe sahip ve stajımın ilk haftasından itibaren bana bu değeri aşılamaya çalışıyorlar.

Stajım kelimenin tam anlamıyla harikulade geçiyor. Her geçen haftada yeni konular öğreniyor ve bunları pratiğe dökme fırsatı buluyorum. Eğer öğrendiklerimi şu anda olduğu gibi pratiğe dökmeseydim bu kadar verim alacağımı da pek zannetmiyorum. Evet, yeni projelere başlarken o projeyi ve kullanacağımız araçları anlama kısmında zorluk çektiğim oluyor elbette ama ekip arkadaşlarım gerektiğinde fazlasıyla yardımcı oluyorlar zaten. Bununla ilgili olarak Eren Abi‘nin aynı konuyu 3 kez anlatıp anladığımdan emin olmak istemesini de hiç unutamayacağım galiba. Umarım stajım böyle eğlenceli ve verimli olmaya devam eder. Yeni şeyler öğrenip var olan problemleri çözmek çok zevkli!

İbrahim Berk Karaal
Yorum Yok

Yorum Yaz

Yorum
İsim
E-Posta
Website