|
我在主程式是一直在做UART收資料,利用threading module 裡的timer function 每3秒上傳伺服器, 在主程式中與副程式都有加timer,前幾分鐘都正常,五分鐘後timer沒有觸發,就沒進副程式,不知道是為什麼?
openwrt嵌入式系統記憶體有限(只有12M),如果在副程式中的t有加上global,副程式中循環call timer會一直產生新的線程而造成記憶體的消耗?
*************主程式**********************************
if __name__ == '__main__':
p = Pakcet()
wifiMac ='000000001111
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host, target_port))
t = threading.Timer(3, sock_to_ser,(p,))
t.start()
while True:
if Serial > 5:
msg=ser.readline().split()[0]
if 26<=len(msg)<=30:
if msg.count(':') == 8:
packet,time=slice_pack(msg)
p.packet_list.append(packet)
***********副程式**************************************
def sock_to_ser(p):
global Serial,t,client,watchDog
watchDog=0
while True:
if '192' in os.popen('(ifconfig wlan0 && ifconfig wlan1) | grep 192').read():
break
else:
os.system('wifi')
time.sleep(20)
try:
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((target_host, target_port))
except:
print 'disconnect'
try:
packet_list = filter_data(p.packet_list) #Find the max of RSSI in one scan of same MAC address
data=check_data(packet_list)
client.sendall(data)
except socket.error: # need to resend when error
try:
client.sendall(data)
except:
client.sendall('resend data error,delete')
print 'resend data error,delete'
try:
response = client.recv(4096)
print response
if response[39:44] =="Good:":
if Serial == 0:
os.system('date -s '+response[22:26]+'.'+response[26:28]+'.'+response[28:30]+'-'+response[30:32]+':'+response[32:34]+':'+response[34:36])
if Serial == 5:
if len(response[44:])==15:
global Face_com
Face_com = response[46:58]
else:
Serial-=1
if int(response[44:46])<61:
t = threading.Timer(int(response[44:46]), sock_to_ser,(p,))
else:
t = threading.Timer((int(response[44:46])-59)*60, sock_to_ser,(p,))
t.start()
else:
t = threading.Timer(3, sock_to_ser,(p,))
t.start()
except:
print "*** No response ***"
t = threading.Timer(30, sock_to_ser,(p,))
t.start()
Serial+=1
if Serial>=10000:
Serial=0
|
|