Форум сайта python.su
Привет всем!!!
Есть небольшой скрипт который держит постоянный коннект к БД (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)
Офлайн