最近在开发flask网站程序的时候,遇到一个资源竟态分配的问题,尝试使用python中的Queue来解决
1 业务场景
在我们的业务中,我们提供了很多台设备可以供用户链接使用,用户通过接口来申请设备使用,在数据库中维护了设备的状态,可用、忙碌和不可用,分配的策略是从数据库中取出可用的设备列表,然后通过调用一个测试链接函数来确认是否实际可用,如果确实可用则把该设备标记为忙碌,然后把设备信息返回给用户,用户根据信息链接该设备进行操作。程序使用Flask框架,结合sqlalchemy组件,第一版本代码结构大体如下:
#从数据库获取所有的可用设备
idle_devices = Device.query.filter_by(state=DEVICE_STATE_IDLE).all()
#寻找第一个可用设备分配给用户
for device in idle_devices:
if device_available(device):
idle_device = device
break
#没有可用设备返回空
if idle_device is