0

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

我希望您对运行 GUI 和非常快速的核心循环以保持适度的游戏实体数组更新的性能问题提出意见。

该机器人由一个无限循环中的主数组组成,该数组不断更新并运行计算。我从我过去的机器人中了解到,GUI 存在性能问题,因为它们需要等待检测事件。

我已经研究了第二个线程的可能性,但我读到 tkinter 不喜欢多个线程。

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

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

有没有更好的方法来设计我还没有发现的这个机器人的结构?

编辑

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

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

4

2 回答 2

1

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

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

于 2017-06-20T21:21:14.110 回答
1

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

这些是简单的对象,用很少的数学来计算新位置,除了窗口边缘之外没有碰撞检测。

GUI 似乎反应灵敏。我可以尽可能快地在同一个 GUI 中输入文本窗口。

我不知道这与你想做的事情相比如何。

于 2017-06-20T22:45:45.673 回答