我试图让饥饿变量增加一到三分钟,而我还有其他代码在运行。使用time.sleep()只会停止整个代码。有没有办法做到这一点?
Hunger=1
If Hunger=1:
sleep(180)
Hunger-=1
答案 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)这样的东西作为周期性的后台任务,但这听起来不像你的用例。