我有一个程序,在你点击一个动作按钮后,它会运行一个很长的过程.当进程正在运行时,根窗口会说它没有响应,即使我知道程序正在后台运行.这个程序将发布给我的几个同事,我想确保他们看到这个时不会惊慌失措,并关闭窗口.我的解决办法是坐在树根上.正在运行的流程的循环中进行更新,但我不确定这是否是最佳修复方案.

使用python 3.3

下面是一个代码示例,让您了解我在做什么,这是从主循环调用的:

def combine(boxes_to, boxes_from, frame):
        to_value,to_pos = gui.checkBoxes(boxes_to)
        from_value,from_pos = gui.checkBoxes(boxes_from)
        frame.destroy()

        running = Label(root,text="Running please do not close..",font = (16))
        running.pack()
        root.update()
        map_to = open("map_to",'r')
        for line in map_to:
            root.update()
            process(line)


        running.destroy()
        map_to.close()
        finish = Button(root, text="Done",command=gui.stop)
        finish.pack()

推荐答案

而你可以打电话给root.在你的循环中,这仍然会产生一些(潜在的)不良副作用.

  1. 程序可能会表现出滞后,这意味着响应用户输入需要很长时间.
  2. 您将只能运行此操作.任何其他操作都必须等待此操作完成.

作为替代方案,我建议您实现简单的多线程.Python multithreading非常简单,可以防止这两个缺点.您将能够执行长时间运行的代码,同时仍然提供一个干净且响应迅速的UI.

如果你的应用程序是可并行的,你可以使用多个线程来减少运行时间.例如,线程1处理条目1-100,而线程2处理条目101-200.

Python-3.x相关问答推荐

模型中的__str__方法在Django管理面板中生成大量重复查询

确定字符串的长度并提取前15或14个字符

无法使用Python slack 螺栓SDK读取在 slack 通道中收到的消息

按一列分组,如果日期列相同,则在数字列中填写缺少的值

从另一个云函数调用带有仅允许内部流量标志的云函数时出现问题

一起使用数据类和枚举

Python (pandas) - 判断一个 df 中的值是否在另一个(不相等)df 中的任何对之间

如何确保 GCP Document AI 模型输出与输入文件同名的 JSON?

如何沿单列获取嵌套列表中的唯一值?

有没有一种方法可以通过输入从 0 到 255 的 R、G 和 B 值来生成 RGB colored颜色 ,而无需使用 python 中的 matplotlib 模块?

合并问卷中多列中的稀疏问题 - Pandas

避免重复连续字符但不包括一个特定字符的正则表达式

如何从脚本中提取 PDF 文档的标题以进行重命名?

Pythonic,自定义警告

如何获得 BeautifulSoup 标签的所有直接子代?

如何将numpy数组图像转换为字节?

TypeError:多个基地有实例布局冲突

将字符串拆分为最大长度 X 的片段 - 仅在空格处拆分

在 macbook pro M1 上安装 Tensorflow 时出现zsh:非法硬件指令 python

finally 总是在 try 块返回之前运行,那么为什么 finally 块中的更新不会影响 try 块返回的变量的值呢?