python - 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 循环是否卡住或后台任务不在单独的线程中工作。请帮助我理解原因。任何帮助都是最受欢迎的。提前致谢。
解决方案
推荐阅读
- python-3.x - 带有 AssertionError 的龙卷风 websocket 崩溃
- jquery - 无论我使用哪种顺序,Rails 5 中的引导程序/jQuery 加载顺序都会中断
- django - Django 建模多对多关系
- html - 填写文本输入时,HTML 表单不会提交
- django - 如何在模型 Y 中序列化模型 X 的外键,其中模型 X 与模型 Y 有关系?
- python - 如何将 keras 模型转换为协议缓冲区 (.pb) 文件?
- angular - 访问 XMLHttpRequest 时访问 XMLHttpRequest 已被 CORS 策略阻止
- phpmyadmin - 登录后phpmyadmin继续加载
- java - 为什么是列表
- > 更新,即使它不是全局变量?
- javascript - 使用正则表达式查找和替换字符串中的每一秒反引号