Simulte Selenium ve Excel Writing için hangisi: threading, asyncio?

Selamlar, farkı chrome oturumlarından oluşan selenium bazlı bir otomasyon projem söz konusu. Yazmaya başlarken simulte işler gerçekleştireceğimi düşünmemiştim ancak şimdi gerekiyor, düşünmüş olsaydım playwright ile bir “Hello World!” projesi yapma zamanım gelmiş derdim. Simulte prensiplerine de pek hakim değilim ancak library seçme kriterlerim arasında bu olmayacak. Selenium bazlı, tarayıcı otomasyonu gerektiren ve her Chrome session’ında güncellenen verileri aynı excel dosyasına pandas yardımıyla yazdırdığım projede hangi teknoloji/kütüphaneyi kullanmalı?

  • asyncio
  • gevent
  • multiprocessing
  • threading

Chrome Session’larını simulte maksimum 2 yada 3 olacak şekilde ayarlayacağım, bu durumda bir pool fonksiyonu da gerekiyor, her session sonucuda hali hazırda bulunan excel doyasına yazma işlemi gerçekleştireceğim.

Program interface olarak excel’i kullanıyor, biliyorum en etkili yolu değil ancak uygulamam için sıfırdan arayüz yazsaydım excel’in getirdiği güzellikleri kullanamazdım. Excelden aldığı görevleri, mesela task, işlem hızı katsayısı, işlemin gerçekleşeceği url, gerçekleştirip yine excel’de bulunan, task_result, task_time gibi sütunlara da belli başlı bilgileri yazacak. Bilgi yazma işlemi çakışabileceği için thread’de lock kullanabilirim sanırım ancak başka bir kütüphanede ne kullanacağımı bilmiyorum. Bu tarz projeler için sizce hangi kütüphaneyi kullanmalıyım, önerdiğiniz kütüphanede ihtiyaçlarımı karşılayacak çözümleri bulmak için hangi konuları araştırmalıyım?

Evet bu tarz bir proje için günümüzde en iyi seçenek playwright gibi görünüyor ancak zamanı katmadeğer olarak düşünürsek, gerçekten büyük bir iş olacak.

Yorumlarınız için şimdiden teşekkür ediyorum, iyi çalışmalar :+1:

1 Beğeni

gevent’i bilmiyorum ama asyncio gibi user-mode (“green”) thread kullanan, coroutine yazdiran bir kutuphane, degil mi?

Hali hazirda mevcut bir async event loop, bir coroutine tabanli eszamanlilik kutuphanesi yoksa eklemenin hic bir manasi yok. Butun olaylari isletim sistemi thread’lerinin overhead’lerini (~1 MiB stack) ekarte etmek. Ve bunun bedeli butun kodu coroutine olarak tasarlayip yazmak. Hata/debug esnasinda stack bilgisi kaybindan kirmizi-mavi problemine kadar bir suru sikintisi var. Ayrica 4-5 sifirli thread sayisina gelmeden faydasini gormek zor.

Process bazli paralellik birbiririyle fazla konusmasi gerekmeyen, ayni kaynaklara erismeyen ve/veya guvenlik icin biribirinden izole olmasi faydali olan programlar icin guzel. Basit bir “su array’i vereyim, hesaplayip cevabini donsun” fonksiyonunu baska process’e almak bile bir suru oynak parcaya ve haliyle olasi hata durumlarina, gereksiz koda donusebiliyor.

Kisaca eszamanli is yaparken thread’lerden baslamak lazim. Mevcut programlama modellerinde/dillerinde en kolay kullanilabilen o, cogu is icin de fazlasiyla yeterli. Sorunlar veya ekstra gereksinimler ciktiginda digerlerine bakilir.

4 Beğeni

Hocam geç cevap veriyorum, gayet güzel bir cevap. Threading kullanacağım, teşekkür ediyorum.