Я переписываю скрипт python для хранения данных из arduino в базе данных postgresql, желая запустить его как деамон, используя python-daemon. Оригинальный скрипт работает нормально, но в deamon я не могу писать в базу данных. Первая попытка заканчивается:python - потеря подключения к postgresql в daemon
<class 'psycopg2.DatabaseError'>, DatabaseError('SSL SYSCALL error: EOF detected\n'
, а затем:
<class 'psycopg2.InterfaceError'>, InterfaceError('cursor already closed',)
В рабочем сценарии, я:
connstring="dbname='"+dbdatabase+"' user='"+dbusername+"' host='"+dbhost+"'password='"+dbpassword+"'"
try:
conn = psycopg2.connect(connstring)
cur=conn.cursor()
except:
my_logger.critical(appname+": Unable to connect to the database")
sys.exit(2)
sql="insert into measure (sensorid,typeid,value) VALUES(%s,%s,%s)"
< more to set up serialport, logging and so on>
while 1:
< fetch a data set and split it to a list >
for (i,val) in enumerate measures:
try:
cur.execute(sql,(sensors[i],typeid[i],val))
conn.commit()
except:
self.logger.error(appname+": error 106 :"+str(sys.exc_info()))
У меня есть чувство, что это может быть какой-то из того же проблема, которую я изначально имел с последовательным подключением, Serial port does not work in rewritten Python code, поэтому я попытался поиграть с files_preserve
, делая:
self.files_preserve=range(daemon.daemon.get_maximum_file_descriptors()+1)
который, насколько я могу судить, должен держать открытым все ручки файлов, но безрезультатно.
В демоне я попытался сначала настроить соединение с базой данных как атрибуты в __init__
, i. е .:
self.conn = psycopg2.connect(connstring)
self.cur=conn.cursor()
, а затем делать вставки в методе run
. Я также попытался создать соединение в верхней части метода run
и даже настроить его как глобальный объект, но во всех случаях что-то, похоже, убивает соединение с базой данных. Любые подсказки? (или какие-либо подсказки, где найти какую-либо документацию (кроме источника) для модуля демонов?)
Оба демона и база данных работают на системах debian linux с python 2.7 and postgresql
8.4`.
Благодарим вас за это! – m0meni