全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 2377|回复: 18
打印 上一主题 下一主题

[Windows VPS] 求指点!自己写的PY CPU100%,但Python果然是树莓派原配!

[复制链接]
跳转到指定楼层
1#
发表于 2019-3-18 23:37:48 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
感谢之前很多大佬领路!愉快的入了树莓派3B,使用体验很好√接了个传感器,自己写了点,但是为啥一直100%占满了1核...

import RPi.GPIO as GPIO
import time

#States File Store Location
ramdisk = "/root/ramdisk0/"

#Init GPIO
def init():
    #No GPIO warnings.
    #GPIO.setwarnings(False)

    #Set mode
    GPIO.setmode(GPIO.BOARD)

    #Set Which Pin
    GPIO.setup(7,GPIO.IN)
    pass

def detct():
    while True:
        curtime = time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time()))
        #High level
        if GPIO.input(7) == True:
            #Alert and update states file to 1(Triggered)
            alert(curtime)
            writedown('1')
        else:
            writedown('0')
            continue
        time.sleep(2)


def alert(curtime):
    print(curtime + "Senser Triggered.")

#Update Triggered
def writedown(states):
    with open(ramdisk+'human-senser.txt','w+') as f:
        f.write(states)

time.sleep(2)

#Starting Loop
init()
detct()
GPIO.cleanup()


求助为什么这段那么简单的代码能卡住一个核QAQ...写文件的地方还是用了内存盘。

难道GPIO有那么占用资源?还是time.sleep有毒...??还是树莓派就连个sleep都能沾满?
推荐
发表于 2019-3-19 08:20:03 | 只看该作者
            writedown('0')
            continue
        time.sleep(2)
如果没有触发,那么直接continue所以跳过了sleep
19#
发表于 2019-3-19 15:59:31 | 只看该作者
continue 去了.
18#
发表于 2019-3-19 15:14:14 | 只看该作者
因为detect下是while True,所以CPU是占用100%的。我没记错的话,sleep好像还是占用CPU的,只是不做事,这个有待考证。另外里面有continue,可能导致sleep没有被执行到
17#
发表于 2019-3-19 14:53:35 来自手机 | 只看该作者
不应该用while loop,应该用interrupt IRQ来做
16#
 楼主| 发表于 2019-3-19 14:17:53 来自手机 | 只看该作者
flcx 发表于 2019-3-19 13:58
既然你的永真循环里面if...else后面就一个sleep,又想每隔2秒做一次判断,干嘛还来个continue跳出本循环 ...

噗……是我傻了!谢谢大佬一语点醒!
15#
发表于 2019-3-19 13:58:59 | 只看该作者
mymyhope 发表于 2019-3-19 09:16
好的!我试试把sleep放到while的最前面。谢谢大佬。

既然你的永真循环里面if...else后面就一个sleep,又想每隔2秒做一次判断,干嘛还来个continue跳出本循环呢?删掉不就好了。
14#
发表于 2019-3-19 13:03:31 | 只看该作者
看起来锅大概率在continue上
一直while true cpu能不高么。。
13#
发表于 2019-3-19 12:20:42 | 只看该作者
我就看到了英文字母 或者符合  其他的不懂了。
12#
 楼主| 发表于 2019-3-19 09:16:31 来自手机 | 只看该作者
bearqq 发表于 2019-3-19 08:20
writedown('0')
            continue
        time.sleep(2)

好的!我试试把sleep放到while的最前面。谢谢大佬。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-11-7 13:00 , Processed in 0.071873 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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