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()
Чтобы остановть поток: