Форум сайта python.su
0
Здравствуйте!
Я не силен в питоне, а ООП в нем же начал использовать только в текущем скрипте.
Сейчас пишу слушатель и разбиратель логов, полученных по UDP. В нем такаяиерархия:
server (запускной файл)
- LogHandler
- ProcessAction
- Database
Код запускного файла вот (в процессе разработки еще):
#!/usr/bin/python # Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details. from twisted.internet import reactor from twisted.internet.protocol import DatagramProtocol from LogHandler import LogHandler from Database import Database def main(): reactor.listenUDP(29876, ProcessUDP()) reactor.run() if __name__ == '__main__': main() class ProcessUDP(DatagramProtocol): def datagramReceived(self, datagram, address): handler = LogHandler() result = handler.parseLine(datagram) if result: print result
Офлайн
20
Синглтон вполне себе подойдет. Если у него сделать метод getConnection(), возвращающий подключение к базе, то Database по необходимости можно будет изменять не переписывая остальной код. Например, сделать из него впоследствии пул коннектов.
Офлайн
0
Хорошо, спасибо! Так и сделал
вот еще в DatagramRecieved() методе класса ProcessUDP создается экземпляр класса LogHandler(), этот класс не синглтон. Получается при каждом вызове DatagramRecieved будет создаваться еще один LogHandler? Как в питоне со сборщиком мусора? Есть ли советы по этому пункту?
Офлайн
20
Со сборщиком мусора хорошо, но создавать отдельный логгер на каждый пакет нехорошо. Его можно создавать при инициализации ProcessUDP.
class ProcessUDP(DatagramProtocol):
def __init__(self):
DatagramProtocol.__init__(self)
self.handler = LogHandler()
def datagramReceived(self, datagram, address):
result = self.handler.parseLine(datagram)
if result:
print result
Отредактировано Soteric (Авг. 31, 2012 10:49:18)
Офлайн