有没有一种方法可以定期运行非void python函数?

时间:2020-01-24 02:30:19

标签: python

我有一个代码段,我希望每30秒定期执行一次。我现在正在使用time.sleep(),这很糟糕,因为它同时阻止了与程序的任何交互,但是我没有找到其他方法来执行此操作。代码是:

while True:
    mapMatrix=updateMaps(mapMatrix,5,before)
    allPlayersRecommendation(initiallyPlayed, arrayPlayerStats, mapMatrix)
    time.sleep(30)

我发现了通过线程库定期运行 void函数的多种方法,但这是不同的,因为我需要将值存储在变量mapMatrix中。

1 个答案:

答案 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中轻松完成此任务的假设仍然是错误的。