【问题标题】:while loop (Python) becomes slow after 500 cycle in Raspberry Pi 4在 Raspberry Pi 4 中循环 500 次后,while 循环(Python)变慢
【发布时间】:2021-01-10 00:59:28
【问题描述】:

我正在使用树莓派 4 控制器(4GB 内存)使用模拟传感器制作一个项目。我目前已经连接了 9 个传感器,我正在使用 while 循环进行无限循环。代码非常简单,从传感器获取输入并使用画布库在按下时更改形状的颜色,在没有按下时保持不变。问题是在 500-550 次循环之后它变得越来越慢。随着循环次数的增加,响应速度变得越来越慢。谁能建议我如何克服这个问题?

我也是编码的菜鸟,所以如果我犯了一些错误,请指导我。我只为一个传感器编写代码,因为它对所有传感器都是一样的。

代码:

from tkinter import *
import Rpi.GPIO as GPIO
import time
import tkinter as tk


GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
.
.
.
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

root=tk.Tk()
canvas = tk.Canvas(root, bg='white', width=500, height=500)
canvas.grid()

canvas.bind('<key>', lambda event: root.destroy() if (event.char == 'q') else 0)

while True:
    def sense1(on):
        square1= canvas.create_rectangle(5, 5, 105, 105, width=0, fill='red' if on else 'green')
    .
    .
    .
    def sense9(on):
        square9= canvas.create_rectangle(235, 235, 335, 335, width=0, fill='red' if on else 'green')

    global S1,...,S9

    if GPIO.input(7) == GPIO.HIGH:
        S1 = sense1(True)
    else:
        S1 = sense1(False)
    .
    .
    .
    if GPIO.input(18) == GPIO.HIGH:
        S9 = sense9(True)
    else:
        S9 = sense9(False)

    root.update_idletasks()
    root.update()




我为其他 8 个传感器编写的代码相同。

【问题讨论】:

  • 如果代码简单,请附上。您的循环中可能发生了导致它的事情。没有任何代码很难分辨。至少,请包括相关部分。
  • 对于每个循环,您都在为每个传感器创建一个新矩形。在诸如 Pi 之类的有限环境中,我想知道如果您提前创建必要的矩形并根据需要修改矩形属性,是否会更容易。
  • 其实这只是为了测试。在实际工作中,我必须连接 150 多个传感器,那时我正在考虑在现成的软件中输出。 @ewong
  • 你的意思是只有这个画布矩形对程序有影响?

标签: python-3.x tkinter while-loop raspberry-pi4 slowdown


【解决方案1】:

检查核心温度。 while 循环会导致微处理器的温度升高。覆盆子具有自我保护机制,当核心温度非常高时会激活,从而导致性能下降。我建议你把while循环改成回调

致敬!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2014-11-02
    • 2020-01-05
    • 1970-01-01
    相关资源
    最近更新 更多