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