我希望能够使用多个应用程序中的USB设备(例如我运行Flask Web应用程序),确保一次只使用一个。
在我的情况下,我使用继电器打开/关闭一扇门。门需要大约20秒才能打开。在此期间,不应激活继电器,因为这会将门锁在中间。
提前致谢!
答案 0 :(得分:1)
不完全是你问题的答案,但也许是关于如何解决这个问题的另一个想法,而不是使用全局变量。
为什么不编写一个用于控制USB设备的小程序。此脚本在您的服务器上运行一次(一个实例),并负责以您需要的方式与设备通信。它还兼顾并发性。
现在通过管道,套接字,无论使用此脚本从您的Web应用程序进行通信,向其发送命令并从中接收结果。
答案 1 :(得分:0)
您有许多可能的解决方案。
posix_ipc或sysv_ipc Python模块提供了一个命名的信号量类。您可以将信号量初始化为1,并让所有Web进程在向USB设备发送命令时获取信号量。
使用文件锁可以实现一种类似的机制,可能使用fcntl.lockf。
另一种完全不同的方法可能是在您的Web服务器进程和USB API之间建立一个新进程。此过程公开了一个API,该API接收来自Web服务器工作者的请求,并通过单线程进程将这些请求隐式序列化到USB设备中。
答案 2 :(得分:0)