我每隔5秒从服务器获取一次更新列表的数据。另外我也在按一下按钮。
所以我需要的是两个独立的循环(拉动数据并通过GPIO监听Raspberry Pi上的物理按钮),并且都需要访问共享列表。
对于一个循环,我可以使用带有while = True
的简单time.sleep(5.0)
但是如何同时使用两个无限运行循环来访问共享变量并且不阻止每个循环其他?按下按钮也应始终保持响应。
我该怎么做?我需要线程吗?
答案 0 :(得分:0)
所以,如果我正确理解你,问题是你想要一个按钮检查循环,每个循环,比如毫秒,而你的服务器轮询循环应该每5秒运行一次。这是对的吗?
简单的解决方案是让服务器轮询代码在每次从上次轮询开始经过5秒后在更快的循环内执行。 如果轮询是耗时的并且在轮询期间阻止按钮检测成为问题,我认为您将必须在并行进程中运行两个循环。但是,这会使问题变得更加复杂,尤其是因为它们正在共享资源。
要在快速循环内实现5秒间隔,您可以执行类似
的操作import datetime
# [...] other code
# inside fast loop
if last_poll_time - datetime.now() >= 5:
poll_again()
last_poll_time = datetime.now()