Python 做一个闹钟,用 while 循环等待时间是否是一个好办法

2020-10-16 10:57:13 +08:00
 sudoy

我在做一个闹钟,等到谋个时间就开始执行谋个动作(在下面的案例里面简化为 print('ok'))。请问这是否是最佳办法?因为我担心会不会导致占用内存过高等问题。我看有一个叫 alarm 的库,也是用 while 循环等待时间。以下是我的示例代码:

在 2020 年 10 月 17 日 10 点 50 分 50 秒的时候触发事件 print('ok')

from datetime import datetime

def alarm():
	while True:
		now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
		if now == '2020-10-17 10:50:50':
			print('ok')
			break


if __name__ == '__main__':
	alarm()
10633 次点击
所在节点    Python
108 条回复
sudoy
2020-10-16 13:52:06 +08:00
@Sapp @kimqcn 所以来请教你们啊 :)
sudoy
2020-10-16 13:54:35 +08:00
@Chaidu 本来就不是程序猿 哈哈哈,业余爱好者😁🤣
widewing
2020-10-16 13:59:21 +08:00
sleep 为什么要加在循环里?直接 sleep 指定时间不香吗?
dswyzx
2020-10-16 14:02:06 +08:00
别听他们的,加 sleep 万一错过这个点了呢,大于等于时间万一没有拯救世界成功呢。
综上所述:能用就行!
imdong
2020-10-16 14:03:15 +08:00
之前有过类似的需求,不过我的做法是用 sleep 但是不是 sleep(1)
而是再执行完毕后,检查距离下一次执行的时间差,然后睡眠到那个时间。
shuax
2020-10-16 14:04:56 +08:00
sleep(0)即可
est
2020-10-16 14:21:49 +08:00
@widewing 设想一个场景。你在虚拟机里跑起来了这个程序。你让虚拟机暂停了。然后 1 个小时后,恢复了虚拟机。这个时候你的 sleep 还是对的吗。
sudoy
2020-10-16 14:21:56 +08:00
@est 哈哈,虽然我找半天没有找到 python 内置的 `sleep()` 是怎么写的,你的话听起来还挺鼓励人的。不过他们说这样写会导致 CUP 占用过高,可能确实没有用 sleep 好,sleep 没有这么高的 CUP 占用。
wusheng0
2020-10-16 14:24:38 +08:00
是不是 fork 一个进程后台运行更好,
有没有大佬来说一下
felixcode
2020-10-16 14:27:06 +08:00
多开几个闹钟就能把多核 CPU 占满了。
sudoy
2020-10-16 14:44:57 +08:00
@shuax sleep(0) 也是解决不了 CUP 占用过高的问题的
![]( )
zkqiang
2020-10-16 14:48:36 +08:00
没让你 sleep 0 啊。。直接计算 定时减去现在 有多少秒,sleep 多少秒就行了
ljsh093
2020-10-16 14:55:47 +08:00
@imdong 设定好 sleep 以后不就没法取消了?只能从外部打断重新设置时间?
zkqiang
2020-10-16 14:56:36 +08:00
或者 sleep(0.5) 每半秒检查一次,另外时间不要用 == 判断,最好用区间判断允许一些误差
imdong
2020-10-16 15:00:47 +08:00
@ljsh093 没有取消的需求,如果有,就在执行前做个判断,一样。

但是会有类似楼主说的睡眠唤醒的问题。
bruce00
2020-10-16 15:06:42 +08:00
狗头真的能保命
heyjei
2020-10-16 15:09:29 +08:00
我真的在生产环境见过这样的代码,你们应该能够理解我当时的心情。
user8341
2020-10-16 15:13:02 +08:00
sleep(0)真实绝了。
jerfoxu
2020-10-16 15:17:18 +08:00
@imdong 这个方法可以哟!
Norie
2020-10-16 15:17:51 +08:00
这是 CPU 性能测试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/715524

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX