Ömer Ücel

May 7, 2008

Sunucuları Bağlanma Hızlarına Göre Sıralama

Filed under: Genel — Tags: — Ömer Ücel @ 1:25 am

Geçen gün kurduğum Ubuntu'da ki yazılım kaynakları uygulamasında rastladım böyle bir özelliğe. Paket sunucusu seçme bölümünde  "en iyi sunucuyu seç" butonu ile en hızlı sunucu bulunulabiliyor. Python ile buna benzer bir uygulama yapmaya çalıştım. Bir nebze başarılı olduğum söylenebilir. Tabi mantıksal bir hata yapmamış isem.

Sunucular eş zamanlı olarak kontrol edildiğinden, hangi işlem önce tamamlanırsa doğal olarak onun bilgisini ekrana yazdırıyor. Böylelikle ek bir işleme gerek kalmadan sıralama kendiliğinden olmuş oluyor (sanırım). Kodlar aşağıdadır. Bir ufak mola niyetine yazıldı. Unutmak Yok, Hatırlat oldu. Onunla ilgileniyorum. Arayüzü sanırım tamamlarım bu gece. Alpha sürümünü bu hafta tamamlamak istiyorum eğer sınavlardan ve işlerden vakit bulabilirsem. Güç ama, imkansız değil.

# -*- coding: utf-8 -*-

import datetime
import socket
from threading import Thread

class ping(Thread):
    def __init__(self,adres,port):
        Thread.__init__(self)
        self.adres = adres
        self.port = port

    def run(self):
        soket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        try:
            zaman = datetime.datetime.now()
            baslangic_ms = zaman.microsecond
            baslangic_s = zaman.second

            if len(str(baslangic_ms))<6:
                baslangic = int(str(baslangic_ms) + (str(0) * (6 - len(str(baslangic_ms)))))
            else:
                baslangic = baslangic_ms

            soket.connect((self.adres,self.port))

            zaman = datetime.datetime.now()
            bitis_ms = zaman.microsecond
            bitis_s = zaman.second

            bitis = bitis_s - baslangic_s
            if bitis<0:
                bitis = bitis.__invert__() + 1
            bitis *= 999999

            if len(str(bitis_ms))<6:
                bitis_ms = int(str(bitis_ms) + (str(0) * (6 - len(str(bitis_ms)))))

            bitis += bitis_ms

            soket.close()
            print "%s Erişim Süresi : %d ms." %(self.adres,bitis-baslangic)
        except:
            print "%s sunucusuna erişilemedi" %(self.adres)

adresler = [
    "omerucel.com",
    "google.com",
    "hotmail.com",
    "microsoft.com"
]

for i in adresler:
    ping(i,80).start()

Birde wxPython da ayırıcı(splitter) kullanımını araştırırken şöyle bir kaynağa rastladım. Açıklayıcı bir şekilde, çoğu aracın örneği mevcut.

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress