Python - 更新核心阵列循环 < 100 毫秒并保持 tkinter GUI 响应

Python - Updating core array loop < 100ms and keeping the tkinter GUI responsive

我是一名机器人开发人员,但我是 Python 的新手。我已经阅读了几个小时,计划设计一个新的机器人。

我想听听您对运行使用 GUI 和非常快速的核心循环以保持适度的游戏实体阵列更新的性能问题的意见。

该机器人由无限循环中的主数组组成,该数组不断更新以及 运行s 计算。我从过去的机器人中知道 GUI 会带来性能问题,因为它们需要等待检测事件。

我研究了第二个线程的可能性,但我读到 tkinter 不喜欢一个以上的线程。

我已经检查了使用 .after 到 运行 来自 tkinter 主循环的核心数组循环的想法,但我的直觉告诉我这将是不好的做法。

现在我觉得我所能做的就是尝试将 GUI 和核心数组全部包含在一个循环中,但这对性能从来都没有好处。

是否有我尚未发现的更好的设计此机器人结构的方法?

编辑

我决定从 tinker 中删除主循环并简单地使用 .update() 来更新我拥有的任何 gui 组件,现在,这仅包含一些覆盖游戏屏幕的标签。

标签和机器人的功能运行到目前为止都很好。

如果您想 运行 在单独的 Python 线程中进行 CPU 密集型工作, 它会使其他线程 CPU。 Python 线程仅适用于高效等待 I/O(原因是 Global Interpreter Lock)。

我会尝试 multiprocessing,这可能会很好,具体取决于您需要在进程之间传递的数据量或不同的语言。

使用 tkinter 和 .after,我编写了一个单线程小程序,显示 1000 个椭圆在屏幕上随机移动,每 50 毫秒更新一次,我没有看到任何延迟。在 10 毫秒时,我想我可能会看到一点点滞后。

这些是简单的对象,几乎不需要数学来计算新位置,除了 window 的边缘外,没有碰撞检测。

GUI 似乎响应迅速。我能够尽可能快地在同一个 GUI 中输入文本 window。

我不知道这与您想做的相比如何。