Code44free's Blog

враппер для mstsc

Posted in Python by code44free on Июнь 24, 2010

Враппер для запуска mstsc
в потоках проверяет доступность фермы и время пинга
по результатам коннектится к серверу с наименьшим временем отклика

# -*- coding: cp1251 -*-
import os, sys, time
import threading

FARM = ['10.32.0.1', '10.32.0.2', '10.32.128.1', '10.32.128.2']

threads = []
hosts = []
best_ip = ''
best_time = 1000
   
# проверяем доступен ли хост
def ping(ip):
    rus = unicode('Ответ', 'cp1251').encode('cp866')
    p = os.popen('ping -n 2 %s' % ip)
    for i in p.readlines():
        if i[:5] == 'Reply' or i[:5] == rus:
            return True

    return False

# запускается в потоке, пингуем хост, сохраняем время затраченное на проверку
def run(ip):
    before = time.time()
    alive = ping(ip)
    if alive == True:
        while 1:
            have_it = lock.acquire()
            if have_it:
                elapsed = time.time() - before
                hosts.append((ip, elapsed))
                lock.release()
                break
   
    return

lock = threading.Lock()

# запускаем потоки
for ip in FARM:
    thread = threading.Thread(target=run, args=(ip,))
    thread.start()
    threads.append(thread)

if len(threads) > 1:
    for t in threads:
        t.join()

    # выбираем победителя
    for ip, elapsed in hosts:
        if best_time > elapsed:
            best_time = elapsed
            best_ip = ip

    # запускаем клиент
    os.spawnv(os.P_NOWAIT, 'c:\\windows\\system32\\mstsc', ('mstsc', '/v:%s' % best_ip))
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: