Python GUI 在评估期间挂起

发布于 2024-11-26 16:57:40 字数 373 浏览 2 评论 0原文

因此,我正在使用 Tkinter 在 Python 中构建一个 GUI,它将用于在运行时加载列出许多 python 脚本的文本文件。然后,脚本将被执行并返回一个数字,指示它们是否成功(返回代码不会随 sys.exit 返回,脚本文件将有一个将被调用并返回 1 或 0 的函数)。在运行时,我使用 exec 将脚本文件作为模块导入,然后使用 eval 调用模块内的函数。

def runtest(test):
    exec 'import ' + test
    func=test+'.'+test+'()'
    return eval(func)

问题是,整个 UI 在评估过程中挂起,但我宁愿让它在后台运行。如果有人知道如何实现这一点,我将不胜感激。

So, I'm building a GUI in Python using Tkinter which will be used to, during runtime, load a textfile listing a number of python scripts. The scripts will then be executed and return a number indicating whether they were successful or not (returncode will not be returned with sys.exit, script files will have a function which will be called and return a 1 or a 0). During runtime I use exec to import the script files as modules and then call the function within the module with eval.

def runtest(test):
    exec 'import ' + test
    func=test+'.'+test+'()'
    return eval(func)

Problem is, the whole UI hangs during the evaluation, but I would rather have it running in the background. Would be much appreciated if anyone know of a way to make this happen.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柳若烟 2024-12-03 16:57:40

可能有两种方法。

  1. 使用Python多处理库http://docs.python.org/library/multiprocessing.html< /a>

  2. Python 线。

由于 Python 的 GIL,选项 1 比选项 2 更好。

来自多处理导入过程

def runtest(test):
   exec 'import ' + test
   func=test+'.'+test+'()'
   return eval(func)

if __name__ == '__main__':
p = Process(target=runtest, args=('mytest',))
p.start()
p.join()

There could be 2 ways.

  1. Use Python multiprocessing library http://docs.python.org/library/multiprocessing.html

  2. Python thread.

Option 1 is good compared to Option 2 due to Python's GIL.

from multiprocessing import Process

def runtest(test):
   exec 'import ' + test
   func=test+'.'+test+'()'
   return eval(func)

if __name__ == '__main__':
p = Process(target=runtest, args=('mytest',))
p.start()
p.join()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文