Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2010 10:39:49

hop
От:
Зарегистрирован: 2009-03-06
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

как грамотно закрыть коннект ?

Привет всем!!!
Есть небольшой скрипт который держит постоянный коннект к БД (mysql) и telnet-коннект на voip switch. Как правильно/грамотно закрыть коннект к БД? Я конечно понимаю,что БД сама по таймауту рубанет нективные коннекты, но все же хотелось бы знать как надо делать.
Код выглядит так, прошу указать на ошибки:

#!/usr/bin/env python
# -*- coding: utf8 -*-

import telnetlib
import re
import time
import datetime
from MySQLdb import connections
import signal
import sys

sleep_time = 10

voip_host = "192.168.1.1"
voip_port = 23
voip_user = "voip_user"
voip_pass = ""

db_user = 'voip'
db_pass = '12345'
db_host = 'localhost'
db_name = 'voip_switch'

class VoipSwitch():
def __init__(self):
self.tn = telnetlib.Telnet(voip_host, voip_port)
self.tn.read_until("login: ")
self.tn.write(voip_user + "\n")
self.tn.read_until("password: ")
self.tn.write(voip_pass + "\n")

def get_port(self):
self.tn.write("line -print" + "\n")
text = self.tn.read_until("usr/config$ ")
matches = re.findall(r"Busy", text)
return len(matches)

def close(self):
self.tn.write("quit" + "\n")
self.tn.close()

class VoipDatabase():
def __init__(self):
self.con = connections.Connection(db=db_name, host=db_host, user=db_user, passwd=db_pass)
self.cu = self.con.cursor()

def add(self, port):
sql = """INSERT INTO main(port, cur_time) VALUES(%d, NOW());""" % (int(port))
self.cu.execute(sql)
self.con.commit()

def get(self):
sql = """SELECT port, cur_date FROM main;"""
self.cu.execute(sql)
data = []
for tmp in self.cu.fetchaall():
data.append(tmp[0])
return data

def close(self):
self.con.close()

if __name__ == "__main__":

def signal_handler(signal, frame):
global db
global voip
db.close()
voip.close()
sys.exit(0)

def signal_handler2(signal, frame):
global db
global voip
db.close()
voip.close()
sys.exit(0)

voip = VoipSwitch()
db = VoipDatabase()
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler2)

while(1):
port = voip.get_port()
print port, datetime.datetime.now()
db.add(port)
time.sleep(sleep_time)
И нужно ли вообще отлавливать SIGINT, SIGTERM? Как в данном случае правильно закрыть telnet-коннект ? И не является все это дело излишеством?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version