您当前的位置:首页 >> 装修日记

七爪源码:使用间隔时间和日期间隔时间模块以固定间隔时间间隔运行的 Python 程序教程

2024-01-27 12:18:20

本导论将教您如何可用 time 和 datetime 应用程序设置 Python 服务器端以每星期运营。如果您不想时常检查某些素材,这很有用,因此您有一个在除此以外运营的 python 服务器端每星期为您进行检查。

补救方案

我会把补救方案置于首位。如果你对我是如何找它感兴趣的,你可以在下面写作它。

如果您所做到的是轻量级的比较简单补救方案

轻量级理论上它才会可用太多的 CPU 增益和时间段,就像一个比较简单的列印系统一样。

假设您不想每 10 秒运营一次字符。

你应当取得这样的两边

有了它,如果你希望相同的时间延迟,你可以去除睡眠时间段,你可以用你不想让服务器端做到的事去除 do_things() formula_的素材。

比较简单补救方案的情况

但是如果你像我一样,你期望每个时间段时间延迟做到的事都需时间段,无论是赶紧来自另一个服务器端的 I/O,还是即将做到一些 CPU 密集型的事。然后,如果我们依然做到我们所做到的事,我们将在赶紧时间段当中取得不正确地,如下上图。

这里我用 sum(i*i for i in range(number)) 对一个巨大的数自愿性 CPU 做到很多临时工,不要在意 50_000_000 当中的下划线,它和 50000000 是一样的。结果这个服务器端是:

如您所见,我们期望服务器端每 10 秒之前执行一次,但服务器端每次可逆大约需 14 秒,这是因为计算需总成本一些额外的时间段。这就是您需文职补救方案的情况。

先进的补救方案

import time from datetime import datetime, timedelta number = 50_000_000 sum(i*i for i in range(number)) print(datetime.now()) while True: previous_datetime = datetime.now() do_things() time_took_running_do_things = datetime.now() - previous_datetime remaining_time_in_secs = (timedelta(seconds=10) - time_took_running_do_things).total_seconds() time.sleep(remaining_time_in_secs)

结果是:

断言

在这里,您可以看到字符每 10 秒运营一次,即使我们即将做到繁重的临时工。这是因为我们通过赶紧多得多的时间段来回报运营 do_things() 所总成本的时间段。如果服务器端运营 do_things() 需 3 秒,那么之后我们只赶紧 7 秒,所以服务器端依然每 10 秒之前执行一次。

局限性

此补救方案仅限于,您要之前执行的操作必须总成本比您要可逆的时间延迟多得多的时间段。如果你不想做到一个每 1 秒需 10 秒的操作,这个补救方案帮不了你。

我是怎么到那里的

过去我将思索我是如何补救这个情况的。

我即将开发一个服务器端,该服务器端查看我究竟每星期玩意电脑小游戏,以提醒自己我玩意了多长时间段,但情况是它非常不正确地。我会玩意一个小游戏 45 分钟,然后服务器端会告诉我我只玩意了 30 分钟。

我一开始以为这是time.sleep()的情况,显然是因为CPU在玩意小游戏的时候做到了很多临时工,赶紧是出错的。

但确信这是出错的,当我不玩意小游戏时,服务器端依然以不正确的时间延迟运营。

然后我把服务器端在每个列车运行内做到的事都释义丢了,只留下列印时间段上下文,然后情况就补救了。确信,情况是我在时间延迟内所做到的总成本超过 2 秒!

然后我第一时间之前设法过度建筑设计情况。我心不想,也许我不想通过寄存器或异步将可逆和 do_things() formula_置于单独的寄存器当中,或者甚至可用多处理来分离出来 CPU。我在 RealPython 上观赏了 Jim Anderson 关于可用即刻加速 Python 服务器端的整个导论,直到我绘制了这张图。

然后我确信,如果我只是离散地做到它们,然后计算我需赶紧多少时间段? 那时我才恍然大悟,情况曾经如此繁杂。 所以我补救了这个情况,并决定写这前言来试图像我这样的人。 所以你有它。

感冒喉咙发炎怎么快速消炎
类风湿性关节炎有哪些症状
传染病科
怎样能使皮肤延缓衰老
蒙脱石散与肠炎宁颗粒哪个好
友情链接