我正在尝试让网络服务器在 pico 从某些引脚收集数据时显示一些数据。一切工作正常,使网络服务器运行,我能够使用“静态”数据访问它,但是事情变得棘手,必须循环定期收集数据并使网络服务器运行。 我尝试使用 _thread 库来实现这一点,就像我在许多教程/项目中看到的那样,并按以下方式测试它是否正常工作(剧透):
def serve(connection):
while True:
client = connection.accept()[0]
try:
html = webpage()
client.send(html)
except Exception as e:
print(f"Error serving client: {e}")
client.close()
...followed by all my methods for logic etc...
def GetSensorsValues():
#Here should be all my data inputs stored locally/updated
print('Test')
ip = connect()
connection = open_socket(ip)
_thread.start_new_thread(serve, (connection,))
while True:
GetSensorsValues()
sleep(5)
我不太明白的是,如果没有 _thread 中的调用,网络服务器可以正常工作,但线程化它是无法访问的。我可能会遗漏一些关于这个线程库如何工作的信息,我希望得到一些帮助...... 感谢您考虑我的请求!
tl;dr:将其剥离到骨头,让线程工作,然后将其重新构建。
感谢您发布来源。 我在底部添加了一些代码审查。
尝试实现......正如我在许多教程/项目中看到的那样
如果来源中有
#
评论将会很有帮助
代码提到了它所基于的教程的 URL。
正如所写,在我看来,OP 代码并不
应该可以工作,因为它似乎没有
与操作系统配合得很好。
通常我希望看到一个
class BackgroundLogging(Thread):
我们可以启动、运行,如果它退出的话还可以加入。
在源代码中提及文档 URL 也很有帮助。 我不能说我觉得这令人鼓舞:
https://docs.micropython.org/en/latest/library/_thread.html
该模块实现了多线程支持。
该模块是高度实验性的,其 API 尚未完全解决,本文档中尚未描述。
也许它应该不起作用?
我没有注意到其中有任何自动化测试,与某些测试不同 其他模块,例如
time
.
您的代码具有三个循环任务:
鉴于目前“没有任何作用”, 我建议你缩小你的野心,直到你 有一些非常简单且有效的东西。 然后你可以慢慢地将它构建成更奇特的东西, 如果一些微小的添加设法破坏了东西,则暂停进行调试。 因此,开始一根红线、一根绿线和一根蓝线。 每个都会简单地打印颜色+时间戳, 短暂睡眠,然后循环重复。 不需要特殊的ADC硬件,所以你可以测试它 在您的笔记本电脑上,看看它是否工作,然后在 Pi 上进行测试,看看它是否工作。 我假设
ADC(4)
和
sensor.read_u16()
调用
“快”并且不会阻塞线程。
将它们替换为常数 0
然后恢复
原始调用将让您在测试期间验证这一点。文件格式
import csv
。 然后你可以附加一行并将其flush() 出来。
更好的方法是使用内置的 sqlite 数据库。 这样你就可以存储一年的读数, 并使用索引表快速获取今天的温度。这里是一些不相关的代码审查。
您可以将
open_socket()
重命名为
open_web_socket()
。路径库
def file_exists(filepath):
try:
os.stat(filepath) # Check if the file exists
return True
except OSError:
return False
我们可以通过选择较新的来加强这一点路径库
自 2022 年起可用。
from pathlib import Path
def file_exists(filepath: str) -> bool:
return Path(filepath).exists()