【问题标题】:Long running processes with a Python Tkinter GUI使用 Python Tkinter GUI 长时间运行的进程
【发布时间】:2013-01-17 23:11:27
【问题描述】:

多年来我一直在编写普通的 python 脚本,但最近不得不深入研究 GUI(使用 Tkinter)。简单地说,我有一个基本的 Tk 窗口设置了一个开始/停止按钮,它应该调用函数Foo()Foo() 函数包含 while True,这会导致 UI 永远锁定。

我想知道是否可以从这里获得一些指导。我应该使用 pythons multiprocessing 工具吗?我也在考虑 Twisted / Gevent / 线程,但我认为它们不适合任务(可能是错误的)。

谢谢!

【问题讨论】:

  • 您没有提供足够详细的信息来说明您的任务是什么以及您要完成什么。
  • 您想要解决的真正问题是什么? Foo 毫无疑问不是你真正想做的。如果您能描述 Foo 的真实性质,我们或许可以为您提供更好的服务,因为适用于具有无限循环的虚拟 Foo 的方法可能不适用于您的实际问题。
  • 我试图让逻辑与这个 UI 部分尽可能地分离。其次,Foo() 不断地监视数据库中的作业,然后发出外部 API 请求。 API 的工作方式是您使用 while True 来读取传入的事件。循环中的睡眠时间很小,因此它实际上并没有占用 CPU 或真正阻塞。
  • 听起来像是 tkinter 的“后”功能的工作。
  • 如果你真的需要多线程,你需要做一些额外的工作,因为(常规)tkinter 不是线程安全的:stackoverflow.com/a/7198960/598794stackoverflow.com/a/14482306/598794

标签: python tkinter multiprocessing


【解决方案1】:

我最终使用了来自 python 的 multiprocessing 库。我在一个新进程中启动Foo() 并开始。当按下停止按钮时,它会终止子进程。

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2015-08-05
    相关资源
    最近更新 更多