我每5秒从服务器获取一次数据,更新一个列表。此外,我还听到了按钮按下的声音。
因此,我需要的是两个独立的循环(通过GPIO拉取数据和监听Raspberry Pi上的物理按钮),并且这两个循环都需要访问共享列表。
对于一个循环,我可以使用一个带有time.sleep(5.0)
的简单while = True
,但是我如何同时使用两个无限循环,这两个循环都访问一个共享变量,并且不会相互阻塞?此外,按下按钮应该始终具有响应性。
我该怎么做呢?我需要线程来完成这个任务吗?
发布于 2016-07-27 17:12:48
所以,如果我没理解错的话,问题是你想要一个按钮检查循环,比如说,每毫秒循环一次,而你的服务器轮询循环应该每5秒运行一次。对吗?
简单的解决方案是让服务器轮询代码在更快的循环中执行,每隔5秒执行一次轮询。如果轮询很耗时,并且在轮询期间按钮检测被阻塞成为一个问题,我认为您将不得不在并行进程中运行这两个循环。然而,这使得问题变得更加复杂,特别是因为他们正在共享资源。
要在快速循环中实现5秒间隔,您可以执行以下操作
import datetime
# [...] other code
# inside fast loop
if last_poll_time - datetime.now() >= 5:
poll_again()
last_poll_time = datetime.now()
https://stackoverflow.com/questions/38618939
复制