我在树莓上运行了一个脚本,以保存arduino收到的一些测量结果。
它工作了一段时间,但突然测量到了。我以为我的arduino被绞死但是检查日志我得到了这个:
Traceback (most recent call last):
File "/home/pi/service-storer/service-storer.py", line 7, in <module>
db="smart_reptil")
File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
在阅读了一些网页后,我发现了一个stackoverflow主题:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
然后,一切都重新开始了。
我的python脚本是这样的:
import zmq
import MySQLdb
###############################################################################
########################## MySQLdb configuration ##############################
###############################################################################
conn = MySQLdb.connect(host= "127.0.0.1",
user="root",
passwd="database_pass",
db="database_name")
############################## SUBSCRIBER #####################################
portSub = "5566"
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://localhost:%s"% portSub)
socket.setsockopt(zmq.SUBSCRIBE,'CC')
############################### PUBLISHER ######################################
portPub = "5556"
#contextPub = zmq.Context()
socketPub = context.socket(zmq.PUB)
socketPub.connect("tcp://127.0.0.1:%s"% portPub)
################################################################################
more = True
part = []
while True:
if socket.recv() == "CC":
more = True
while more:
part.append(socket.recv())
more = socket.getsockopt(zmq.RCVMORE)
#print part[0]
if int(part[0]) == 99:
try:
x = conn.cursor()
x.execute("INSERT INTO devices (state,sensor_size, relay_size) VALUES (0, %d,%d)" % (int(part[2]), int(part[4])))
conn.commit()
x.execute("SELECT LAST_INSERT_ID()")
row = x.fetchone()
x.close()
except:
#ser.write("error")
print "ERROR"
conn.rollback()
#clean part array for next frame
part = []
我是否在使用mysql做错了什么?我应该改变打开和关闭光标的方式以避免这种行为吗?它是我脚本外部的东西吗?
Raspberry pi(2 b +)有25 gb免费。 ram内存也没关系。
答案 0 :(得分:0)
我在这里看到的可能是尝试/除了更多的通用和通才。发生错误时你不知道X的状态,并且在所有情况下都没有最终关闭X.
这不是你正在寻找的(机器人/修正),但可能有助于更准确地捕捉异常,并在其中做正确的工作。