在Python中使用多个定时器危险吗?

4 投票
2 回答
2545 浏览
提问于 2025-04-16 05:16

我正在用Python 3.1开发一个基于文本的游戏,这个游戏主要依靠时间来进行玩法。为了更有效地实现这一点(而不是像现在这样每次主循环都检查时间,这样不准确,而且如果同时有很多人玩游戏会变得很慢),我在考虑使用Threading.Timer这个类。多个定时器同时运行会有问题吗?如果有的话,推荐使用多少个定时器呢?

举个例子,用户输入开始游戏的指令。游戏开始后,每过一秒就决定是否会发生某些事情,所以每个同时在线的用户都需要一个Timer(1)。如果发生了某些事情,玩家需要在一定时间内做出反应,因此必须为此设置一个定时器。如果用户反应得够快,这个定时器就需要结束,并根据接下来要发生的事情设置一个新的定时器,依此类推。

2 个回答

1

同时运行多个计时器是完全安全的。不过要注意,这可能不会显著提高性能,因为CPython解释器(也就是标准的Python解释器)使用了一个叫做全局解释器锁(GIL)的东西,这会让多线程的操作变得有点慢。

3

我觉得在你的情况下使用定时器并不是个好主意。

在Python中使用延迟线程会让代码变得更复杂,准确性下降,性能也可能变得更差。基本上,如果你觉得需要用到线程,那其实你可能并不需要。很少有程序真的能从使用线程中获益。

我不太清楚你是怎么处理输入的。你提到有多个玩家,我不确定是用一个键盘还是通过网络连接。不管怎样,你现在的主要循环策略可能是最好的选择。虽然不看到你的主循环是怎么运作的,很难确定这一点。

撰写回答