随着时间的推移使事情发生python

时间:2013-05-23 23:42:49

标签: python time

我试图让饥饿变量增加一到三分钟,而我还有其他代码在运行。使用time.sleep()只会停止整个代码。有没有办法做到这一点?

Hunger=1
If Hunger=1:
    sleep(180)
    Hunger-=1

2 个答案:

答案 0 :(得分:2)

这是线程的工作:

import thread, time

hunger = 0

def decreaseHunger():
    global hunger
    while True:
        time.sleep(180)
        hunger -= 1

thread.start_new_thread(decreaseHunger, ())

# you can do other stuff here, and it will continue to decrease hunger
# every 2 minutes, while the other stuff happens as well

答案 1 :(得分:1)

如果你需要很多这些类型的东西来异步运行并且它是一个大型项目,你可以考虑使用像celery(http://docs.celeryproject.org/en/latest/getting-started/introduction.html)这样的异步任务队列库。当然,这可能是太多的开销 - 不知道你的项目正在尝试做什么。

您将定义一个名为increase_hunger的任务,例如:

@celery.task
def increase_hunger():
hunger=1
while True:
    sleep(180)
    hunger+=1

在主代码中,调用add_hunger.apply_async()将从其他位置启动此任务。有关确切放置任务代码的位置以及如何设置芹菜项目的详细信息,您应该完成本教程。

另一种方法是使用像芹菜节拍(http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html)这样的东西作为周期性的后台任务,但这听起来不像你的用例。