如何在Python中每分钟发生一次动作

时间:2013-04-03 18:42:23

标签: python loops time count

我想每分钟为变量添加1而不会干扰已经运行的代码。

这是一款游戏,所以我想要在木材+ 1,摇滚+ 1,鱼+ 1的背景下每分钟发生而用户不知道。

time.sleep在这种情况下不起作用,因为它会暂停整个程序。

start=time.time()
#some code
end=time.time()
if end-start > 60:
    wood = wood+1
    rock = rock+1

我尝试过上面做过的事情,却无法让它继续计算。它只测量#some代码执行所需的时间。

任何帮助都会很棒!提前谢谢。

4 个答案:

答案 0 :(得分:7)

您需要在python

中导入线程模块和 itertools (除了svks' comment之外)
import thread, time, itertools

初始化你的线程安全计数器,如

wood = itertools.count().next()

并将您的计数器更新写入函数

def updateCounter():
   while True:
       wood.next()
       # wood += 1
       time.sleep(60)

并使用

启动新主题
thread.start_new_thread(updateCounter, ())

但是像 wood 这样的资源变量必须可以从计数器函数中访问!

答案 1 :(得分:5)

这是一个不涉及线程的答案,因为线程可能很难做到正确。 (如果你使用线程,你需要阅读线程之间的同步,否则你可能会遇到微小的错误。)

你可能有某种“主循环”。也许它看起来像这样,目前:

while game.running:
    game.process()

主循环并没有什么神奇之处 - 你可以在这里处理输入和绘画之外的事情。如果你想每分钟运行一次,你可以简单地做这样的事情:

t0 = time.time()
while game.running:
    t1 = time.time()
    if (t1-t0) >= 60.0:
        game.wood += 1
        t0 = t1 
    game.process()

如果您正在使用某些库,则可能会将主循环隐藏在库中。在这种情况下,你可能或多或少地开始你的游戏:

game.main() # this function doesn't return until your game exits

如果是这种情况,您的库中可能会有一个函数来执行与上述相同的操作 - 设置代码可以每隔一段时间或以指定的时间间隔执行。寻找“空闲功能”或“定时器”。

答案 2 :(得分:1)

要执行此操作,您需要单独的线程来负责递增计数器。但请记住,将线程引入任何程序会使其更复杂。有关详细信息,请参阅threading docs

此外,您不确定特定线程每秒会得到处理器的时间,您可以假设但是您不确定。

答案 3 :(得分:1)

它将每60秒运行一次。

        try {
        while (true) {
            System.out.println(new Date());
            Thread.sleep(60 * 1000);
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }