Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 31, 2012 07:10:29

Neka
Зарегистрирован: 2012-08-31
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача объекта вниз по иерархии

Здравствуйте!
Я не силен в питоне, а ООП в нем же начал использовать только в текущем скрипте.

Сейчас пишу слушатель и разбиратель логов, полученных по 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

При создании объекта Database в конструкторе создается соединение с MySQL, и мне нужно его поддерживать открытым на протяжении всего цикла reactor.run(). Тоесть объект Database должен создаваться единожды, и должен быть уникальным на протяжении всей жизни скрипта.

Как же это сделать правильно? Может синглтон? Глобальный объект? еще какой способ?

Спасибо за ответы!)

Офлайн

#2 Авг. 31, 2012 08:04:36

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Передача объекта вниз по иерархии

Синглтон вполне себе подойдет. Если у него сделать метод getConnection(), возвращающий подключение к базе, то Database по необходимости можно будет изменять не переписывая остальной код. Например, сделать из него впоследствии пул коннектов.



Офлайн

#3 Авг. 31, 2012 10:05:09

Neka
Зарегистрирован: 2012-08-31
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача объекта вниз по иерархии

Хорошо, спасибо! Так и сделал
вот еще в DatagramRecieved() методе класса ProcessUDP создается экземпляр класса LogHandler(), этот класс не синглтон. Получается при каждом вызове DatagramRecieved будет создаваться еще один LogHandler? Как в питоне со сборщиком мусора? Есть ли советы по этому пункту?

Офлайн

#4 Авг. 31, 2012 10:46:40

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Передача объекта вниз по иерархии

Со сборщиком мусора хорошо, но создавать отдельный логгер на каждый пакет нехорошо. Его можно создавать при инициализации 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)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version