首页 > 编程问答 >不要在页面中停止循环

不要在页面中停止循环

时间:2024-06-08 22:01:01浏览次数:23  
标签:python netmiko nicegui

在我使用 nicegui 的 python 脚本中有一个循环。 脚本执行 verif_input() 时没有停止。

您可以在下面找到我简化的脚本:

def verif_input():
...
    net_connect = ConnectHandler(ip=router["ip"], username=router["username"], password=router["password"], device_type=router["device_type"], fast_cli=False)
    result = net_connect.send_command("exec " + input_file.rsplit('/', 1)[1], strip_prompt=False,strip_command=False, cmd_verify=False)
    result += net_connect.send_command_timing("admin save", cmd_verify=False)
....

def mainfct():
    with ui.stepper().props('vertical').classes('w-full') as stepper:
        with ui.step('step 1'):
            with ui.stepper_navigation():
                ui.button('Next', on_click=stepper.next)

        with ui.step('step 2'):
            with ui.stepper_navigation():
                ui.button('Next', on_click=stepper.next)
                ui.button('Back', on_click=stepper.previous).props('flat')

        with ui.step('step 3'):
            with ui.stepper_navigation():
                ui.button('Verif', on_click=lambda: ui.navigate.to('/FTTO_PHASE1_RES_page', new_tab=True)).props('no-caps')
                ui.button('Back', on_click=stepper.previous).props('flat')

    @ui.page('/FTTO_PHASE1_RES_page',title='PHASE1_RES1')
    def PHASE1_RES_page():
        verif_input()

ui.button('GO', on_click=lambda: ui.navigate.to('/FTTO_PHASE1_page', new_tab=True)).props('no-caps')

@ui.page('/FTTO_PHASE1_page',title='FTTO_PHASE1')
def PHASE1_page():
    ui.button('GO', on_click=lambda: mainfct()).props('no-caps')

ui.run()

我刚刚发现,只有 Netmiko 的这一行 "admin save" 导致了这个问题。

result += net_connect.send_command_timing("admin save", cmd_verify=False)

您知道 "admin save" 和循环之间的联系吗?


问题很可能出在 net_connect.send_command_timing("admin save", cmd_verify=False) 这一行,特别是 send_command_timing 这个方法上。 虽然代码片段没有展示 send_command_timing 的具体实现,但根据其名称和使用场景可以推断,它很可能包含以下逻辑:

  1. 发送命令 : 向设备发送 "admin save" 命令。
  2. 等待响应 : 等待设备返回命令执行结果或者超时。
  3. 返回结果 : 将设备返回的结果返回给调用方。

在这个过程中, 等待响应 这一步很可能会阻塞当前线程的执行,直到收到设备的响应或者超时。如果设备响应缓慢或者网络连接存在问题, send_command_timing 方法就会长时间阻塞,导致 verif_input 函数无法正常结束,进而导致 NiceGUI 界面卡住。

解决方法:

  1. 异步执行 : 将 send_command_timing 的调用放到一个独立的线程或者协程中异步执行,避免阻塞 NiceGUI 的主线程。可以使用 Python 的 threading 模块或者 asyncio 库实现。

```python import asyncio

async def run_admin_save(net_connect): result = await net_connect.send_command_timing("admin save", cmd_verify=False) return result

async def verif_input(): ... result = await asyncio.create_task(run_admin_save(net_connect)) ... ```

  1. 超时机制 : 为 send_command_timing 方法设置一个合理的超时时间。如果超过指定时间还没有收到设备的响应,则抛出异常或者返回一个默认值,避免无限期地等待。

  2. 优化设备配置 : 检查设备配置,确保 "admin save" 命令能够快速执行。可以尝试优化设备的硬件配置、调整系统参数或者升级设备固件。

  3. 排查网络问题 : 检查网络连接是否稳定,网络延迟是否过高。可以尝试使用 ping 命令测试网络连通性和延迟。

通过以上方法,可以解决 send_command_timing 方法阻塞导致 NiceGUI 界面卡住的问题,使你的 Python 脚本能够正常运行。

标签:python,netmiko,nicegui
From: 78593397

相关文章

  • Python数据结构解析:从基本语法到实战应用,提升代码效率与性能
    基本语法Python提供了多种内置的数据结构,包括列表(List)、元组(Tuple)、集合(Set)、字典(Dictionary)等。这些数据结构具有不同的特点和用途,可以根据需求选择合适的数据结构。1.列表(List)列表是Python中最常用的数据结构之一,用于存储一系列元素,可以是不同类型的数据。列表使用......
  • 0004python金融量化初入门
    >Date:2024.04.24>Keywords:在量化投资(证券和比特币)开源项目里,全球star数排名前10位里面,有7个是Python实现的。从数据获取到策略回测再到交易,覆盖了整个业务链。而全球注册用户数最多的商业量化平台Uqer优矿,也同样是基于Python实现和提供服务的。国内后来的其他量化平台,例如ricequ......
  • 【python】OpenCV—Blob Detection(11)
    学习来自OpenCV基础(10)使用OpenCV进行Blob检测文章目录1、cv2.SimpleBlobDetector_create中文文档2、默认parameters3、配置parameters附录——cv2.drawKeypoints1、cv2.SimpleBlobDetector_create中文文档cv2.SimpleBlobDetector_create是OpenCV库中用于创......
  • 100天精通风控建模(原理+Python实现)——第28天:风控建模中逻辑回归是什么?主要应用在
    在当今风险多变的环境下,风控建模已经成为金融机构、企业等组织的核心工作之一。在各大银行和公司都实际运用于业务,用于营销和风险控制等。本文以视频的形式阐述风控建模中逻辑回归是什么,主要应用在哪些方面。并提供风控建模原理和Python实现文章清单。  之前已经阐述了1......
  • python 多任务之多进程
    多任务优势多个任务同时执行可以大大提高程序执行效率,可以充分利用CPU资源,提高程序的执行效率概念是指在同一时间内执行多个任务多进程概念进程(process)是资源分配的最小单位,他是操作系统进行资源分配和调度运行的基本单位,比如:一个正在运行的程序就是一个进程,如QQ,微信等......
  • 运筹学练习Python精解——运输和指派问题
    练习1如下表的运输问题中总需要量超过总供应量(方框中的数字是单位运费)。假定对销地\(B_1\)、\(B_2\)和\(B_3\)未满足需要量的单位罚款成本是5、3和2,试建立该问题的数学模型,并探讨能否将其转变为产销平衡运输问题。产地\销地B1B2B3供应量A151710A264......
  • Python【cv2:读取图片时报错】
    写在前面:opencv库安装在终端用pipinstall安装opencv-python库建议使用国内清华源的镜像去安装,加参数-ihttps://pypi.tuna.tsinghua.edu.cn/simple代码如下:pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleopencv-python报错一我一开始直接用cv2.imread(p......
  • Python学习日记Day1
    目录一、Python的安装二、输出print()1,输出单变量后换行——print(*)2,连续输出多个变量不换行——print(*,*,*,*,*)用英文逗号分离3,使用ASCII码进行输出——借助chr()函数4,使用Unicode码进行输出——借助ord()函数 5,ASCII码与Unicode码的相互转换6,使用print()函数将内......
  • Python基础操作之模块 -- pandas之groupby函数
            groupby函数是pandas库中一个非常强大的功能,它允许你根据一个或多个列的值对DataFrame或Series进行分组,并对每个组执行各种聚合操作。目录示例详解1.导入必要的库和创建DataFrame2.使用groupby函数进行分组3.遍历分组并查看内容4.对分组执行聚合操作......
  • 【python】python电影评论数据抓取分析可视化(源码+数据+课程论文)【独一无二】
    ......