在while循环内的函数上放置一个计时器[重复]

Posted

技术标签:

【中文标题】在while循环内的函数上放置一个计时器[重复]【英文标题】:Put a timer on a function inside while loop [duplicate] 【发布时间】:2018-01-28 23:20:22 【问题描述】:

有很多关于它的问题,但我还不太明白。 我必须将一些代码上传到服务器才能 24/7 运行,而这段代码基本上是这样的:

while True:
    variable1 = function1()
    variable2 = function2()
    variable3 = function3()

假设我想每隔一小时左右做一次variable2 = function2(),以提高性能(我对此不太了解,但我认为在上面放一个计时器会很好)

我不能在上面使用time.sleep(),因为代码必须继续运行 我提到了服务器的事情,因为我不知道使用系统计时器的答案是否适用于它,我仍在学习如何做到这一点。 忘了说我使用的是 Python 2.7

【问题讨论】:

你问的是线程吗? @whackamadoodle3000 我不知道是什么,让我查一下 你想知道每个函数的结束需要多少时间? @keyvanvafaee 我不确定我是否理解......功能 2 不需要每小时运行 100 次,我只需要一次。但是这段时间必须继续进行,所有的代码都在里面,所以我需要为那个单一的调用设置一个计时器。 如果您希望以 不同 的频率执行 3 个定期操作,请考虑将它们作为完全独立的进程运行,由 cron 实用程序安排(您会在外部发现Python 世界,但它可以为您运行 Python 脚本,就像它可以运行其他任何东西一样)。如果你必须在同一个进程中拥有这些函数,那么听起来你需要三个函数在不同的线程中运行。 Python 可以通过 threading 模块为您处理。但是线程是一个深奥的话题,有一些陷阱等待粗心的人,所以去谷歌搜索吧。 【参考方案1】:

不确定这是否是您想要的,但这里有一个循环,它运行具有三个不同周期的三个函数:

import time

t1 = t2 = t3 = 0

period1 = 1.0 # do function1() every second
period2 = 3600.0  # do function2() every hour
period3 = 60.0 # do function3() every minute

sleep_seconds = 0.1   # or whatever makes sense

while True:

    t = time.time()

    if t - t1 >= period1:
        variable1 = function1()
        t1 = time.time()

    if t - t2 >= period2:
        variable2 = function2()
        t2 = time.time()

    if t - t3 >= period3:
        variable3 = function3()
        t3 = time.time()


    time.sleep( sleep_seconds )

【讨论】:

这可能行得通。所以 t 随着系统时间的增加而增加,是吗?如果从服务器运行会不会有问题(我真的不知道服务器是如何工作的) time.time() 返回自 1970 年新年香槟瓶塞在伦敦和约翰内斯堡弹出以来经过的秒数。我可以预见问题的唯一情况是服务器的时钟设置是否严重错误由于某些奇怪的原因(例如,比它应该在的位置提前几个小时),它会在您运行时通过时间服务器进行自我纠正。 它应该可以正常工作,这是我仅保存一些请求的糟糕尝试。谢谢!

以上是关于在while循环内的函数上放置一个计时器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

foreach 循环内的 while 循环仅返回 1 行

While 循环计时如何在带有多个线程的 C# 中工作?

使用 sleep() 函数作为带有 while 循环的计时器不起作用?

无限while循环内的Sleep()函数

如何设置计时器来控制循环内的函数调用?

在 ID 内的特定元素上放置过滤器 [重复]