首页 > 解决方案 > start_background_task 在执行其他异步方法时卡住

问题描述

我正在开发蓝牙应用程序,我正在发现蓝牙设备并更新它们的数据。我只想在数据发生变化时更新 UI 上的数据。所以我写了以下方法:

def update_display_devices():
    global display_devices
    old_data = {}
    while True:
        if old_data != display_devices:
            socketio.emit('display', {"status": "True", "msg": display_devices})
            old_data = copy.deepcopy(display_devices)
        socketio.sleep(2)


@socketio.on('my event')
def handle_my_custom_event(json, methods=['GET', 'POST']):
    global thread
    if not thread.is_alive():
        thread = socketio.start_background_task(update_display_devices)
    socketio.emit('display', {"status": "True", "msg": display_devices})
    logging.debug(f"my event finished.. !!!!")

当我开始扫描蓝牙设备时,所有可用的设备都开始暴露它们的节点并且回调方法出现在图片中。每个设备暴露大约 25-30 个节点,网络中大约有 30 个设备。因此,处理所有请求需要几秒钟,并且display_devices每次调用都会更新变量。

但我面临一个问题,即 UI 不是每 2 秒更新一次。

我不确定 while 循环是否卡住或后台任务不在单独的线程中工作。请帮助我理解原因。任何帮助都是最受欢迎的。提前致谢。

标签: pythonmultithreadingapiflasksocket.io

解决方案


推荐阅读