由于我们要将传感器数据通过2g模块实时上传到云端,并由网页进行展示,时间很紧,我就写了一个使用python来实时接收,并存储到数据库中的小程序。
再一次体会到了python的强大,不过还没进行完整测试,多个模块同时传输,可能会有bug。
import threading
import socket
import mysql.connector
#进程锁,防止在写数据库中,多个cursor操作
lock = threading.Lock()
#建立mysql连接
conn = mysql.connector.connect(user='', password='', database='')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#监听最大数量
s.listen(30)
print('Waiting for connection...')
#写数据库指针
cursor = conn.cursor()
def tcplink(sock, addr):
print('Accept new connection from %s:%s...' % addr)
while True:
data = sock.recv(1024)
try:
data.decode('utf-8')
except:
break
finally:
data=data.decode('utf-8')
#检测是否以我规定的字符开头
if not data.startswith('××××'):
break
#防止写库时多个cursor,加锁
lock.acquire()
#写库
cursor.execute()
#提交
conn.commit()
#解锁
lock.release()
sock.close()
print('Connection from %s:%s closed.' % addr)
while True:
#检测是否有mysql连接,没有自动重连接
if(conn is None):
conn = mysql.connector.connect(user='', password='', database='')
cursor = conn.cursor()
else:
conn.ping(True)
sock, addr = s.accept()
t = threading.Thread(target=tcplink, args=(sock, addr))
t.start()