找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2609|回复: 0

[求助] threading.timer() 不會進到副程式

1

主题

1

帖子

1

积分

贫民

积分
1
tim81121 发表于 2017-11-2 22:22:16 | 显示全部楼层 |阅读模式
我在主程式是一直在做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



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表