我有一个代码段,我希望每30秒定期执行一次。我现在正在使用time.sleep(),这很糟糕,因为它同时阻止了与程序的任何交互,但是我没有找到其他方法来执行此操作。代码是:
while True:
mapMatrix=updateMaps(mapMatrix,5,before)
allPlayersRecommendation(initiallyPlayed, arrayPlayerStats, mapMatrix)
time.sleep(30)
我发现了通过线程库定期运行 void函数的多种方法,但这是不同的,因为我需要将值存储在变量mapMatrix
中。
答案 0 :(得分:0)
这不是一个问题,因为您可能认为线程化是对 void 任务的一般假设,看来您要在此处完成的任务是将函数的结果分配给变量。由于线程的target
函数的“结果”被丢弃,因此带来了问题。
我们的解决方案非常简单,您只需将变量赋值包装在void函数中
import threading
import time
a = 0
def get_result():
return time.strftime("%a, %d %b %Y %H:%M:%S +0000")
def routine():
global a
while True:
a = get_result()
time.sleep(5)
threading.Thread(target=routine).start()
while True:
print(a)
线程直接运行routine
,该线程将间隔运行get_result
并将结果存储到全局变量a
中。
但是,您仍然应该考虑评论者的建议,即threading
可能不是此处最合适的解决方案。尽管如此,线程无法在python中轻松完成此任务的假设仍然是错误的。