Kamisel
Фев. 7, 2011 16:33:33
Доброго времени суток!
Совсем недавно заинтересовался Python, нахожусь на начальном уровне изучения. К сожалению по форуму не нашёл, имеется бд pgsql установленная на linux в которой периодически обновляются поля т.е поступают новые данные, хотелось бы написать какое то приложение, цель коннектиться к базе и выводить на экран новые пришедшие сообщения т.е соединение должно быть постоянно открыто и раз в 30 сек проверять новые поступления. Приложение планирую для Windows.
Имеются ли мануалы или примеры подобных программ? а так же возможно сделать данное соединение без использования odbc драйвера? Заранее благодарю.
ziro
Фев. 8, 2011 10:34:30
По архитектуре БД для такого рода приложений можете посмотреть как это организовано в friendsfeed -
http://bret.appspot.com/entry/how-friendfeed-uses-mysql - там конечно по mysql, но идеи будут хорошо работать и на слоне.
По поводу соединения с БД - если речь идет именно о питоне - смотрите например здесь -
http://wiki.postgresql.org/wiki/Python
Kamisel
Фев. 8, 2011 13:09:39
Благодарю
DcDr
Фев. 9, 2011 15:44:08
А подключение к PostgreSQL через psycopg2 - это самый лучший на сегодня из существующих драйверов\адаптеров между PostgreSQL и Python.
Или через SQLAlchemy, если на более высоком уровне хочется программировать.
Kamisel
Фев. 16, 2011 11:38:04
Да psycopg2 использовал. В принципе у меня получилось соединение, данные все переносятся в таблице и обрабатывается. Теперь мысль в том как сделать, что бы раз в 30 сек допустим, программа проверяла наличие обновлений в таблице, таймер какой то делать нужно? У меня затруднения в этом. Зацикливать процесс не вариант.
zheromo
Фев. 17, 2011 07:47:30
Используйте потоки
модуль threading
from threading import Thread
class MySheduler(Thread):
def run(self):
while True:
do_something()
time.sleep(30)
MySheduler().start()
Kamisel
Фев. 18, 2011 08:20:02
>>> class MySheduler(Thread):
def run(self):
while True:
do_something()
time.sleep(5)
SyntaxError: unindent does not match any outer indentation level
>>>
Вот такая ошибка, если честно не очень понял с поточностью, но есть такой скрипт
>>> import threading
>>> class Timer(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.event = threading.Event()
def run(self):
while not self.event.is_set():
print ('hi')
self.event.wait(1)
def stop(self):
self.event.set()
tmr = Timer()
tmr.start()
>>>
Мне кажется понятно, что хочу выводить слово ‘hi’ через определённый интервал времени.
К сожалению тоже не отрабатывает.
Борисенков Сергей
Фев. 18, 2011 09:35:11
А с отступами у вас все в порядке?
Kamisel
Фев. 18, 2011 09:54:15
Ошибок последний скрипт не даёт, он просто не запускается, с отступами честно, не знаю, если есть какие то мысли или идеи, прошу высказать предположения, попробую проверить.
Борисенков Сергей
Фев. 18, 2011 10:55:16
Читаем
https://www.ibm.com/developerworks/ru/library/l-python_part_9/еще ищем в интернете и снова читаем :)
Вобщем где-то так:
import threading
import time
class ClockThread(threading.Thread):
def __init__(self,interval):
threading.Thread.__init__(self)
#self.daemon = True
self.interval = interval
self.runned=True
def run(self):
while self.runned: #True:
print("The time is %s" % time.ctime())
print self.runned
time.sleep(self.interval)
t = ClockThread(5)
t.start()
Чтобы остановть поток: