python程序占用cpu过高,Python脚本使用cpu过多

I'm not an expert in programming so i googled a lot to get this script to work. It listens on the serial interface ans is searching for 3 values (temperature, humidity and battery level). If it finds one of zhem it saves it to a text file and checks if the value is above or under a certain level. I f this is the case it sends an e-mail to warn.

My problem is that it uses constatntly about 99% of cpu power...

Can you help me to limit the CPU usage to a minimum.

Thanks

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import serial

import time

import sys

import smtplib

from time import sleep

def mail(kind, how, value, unit):

fromaddr = 'sender@domain.com'

toaddrs = 'recipient@domain.com'

msg = "\r\n".join([

"From: sender",

"To: recipient",

"Subject: Warning",

"",

"The " + str(kind) + " is too " + str(how) + ". It is " + str(value) + str(unit)

])

username = 'user'

password = 'password'

server = smtplib.SMTP('server:port')

server.ehlo()

server.starttls()

server.login(username,password)

server.sendmail(fromaddr, toaddrs, msg)

server.quit()

def main():

port = '/dev/ttyAMA0'

baud = 9600

ser = serial.Serial(port=port, baudrate=baud)

sleep(0.2)

while True:

while ser.inWaiting():

# read a single character

char = ser.read()

# check we have the start of a LLAP message

if char == 'a':

# start building the full llap message by adding the 'a' we have

llapMsg = 'a'

# read in the next 11 characters form the serial buffer

# into the llap message

llapMsg += ser.read(11)

if "TMPB" in llapMsg:

TMPB = llapMsg[7:]

with open("TMPB.txt", "w") as text_file:

text_file.write(TMPB)

if float(TMPB) >= 19:

mail("temperature", "high", TMPB, "°C")

elif float(TMPB) <= 15:

mail("temperature", "low", TMPB, "°C")

else:

pass

elif "HUMB" in llapMsg:

HUMB = llapMsg[7:]

with open("HUMB.txt", "w") as text_file:

text_file.write(HUMB)

if float(HUMB) >= 80:

mail("humidity", "high", HUMB, "%")

elif float(HUMB) <= 70:

mail("humidity", "low", HUMB, "%")

else:

pass

elif "BATT" in llapMsg:

BATT = llapMsg[7:11]

with open("BATT.txt", "w") as text_file:

text_file.write(BATT)

if float(BATT) < 1:

mail("battery level", "low", BATT, "V")

else:

pass

sleep(0.2)

if __name__ == "__main__":

main()

解决方案

I solved the question myself.

The while ser.inWaiting(): loop was causing the heavy cpu load.

I removed it and corrected the indentation and it works great with a few % cpu load.

Thanks for your hints, it helped me solving the problem.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值