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()
10594 次点击
所在节点    Python
108 条回复
duyuyouci
2020-10-16 11:20:41 +08:00
可以用 celery 做定时任务啊
ruanimal
2020-10-16 11:25:12 +08:00
循环里加个 sleep 吧,不然 cpu 都占满了
nevin47
2020-10-16 11:25:52 +08:00
CPU 都炸了。。。。。。
RRRoger
2020-10-16 11:26:23 +08:00
用操作系统的定时任务触发是不是会更好点
vZexc0m
2020-10-16 11:26:49 +08:00
可以用 APScheduler
yaoye555
2020-10-16 11:27:59 +08:00
crontab 或许更值得拥有
qile1
2020-10-16 11:29:44 +08:00
这样应该可以,但是有时候 print 有数据,程序确不执行挺奇怪,好像也没有啥好办法
ysc3839
2020-10-16 11:31:12 +08:00
内存占用不高,CPU 使用率会高。如果不想使用操作系统独有的 API 的话,那就加上 sleep 吧。
no1xsyzy
2020-10-16 11:31:46 +08:00
占满一个核,内存不会泄漏
不要用等于判断时间
stephenxiaxy
2020-10-16 11:32:09 +08:00
。。。
MoYi123
2020-10-16 11:50:30 +08:00
不如 asyncio.sleep
MagnifierSun
2020-10-16 12:56:12 +08:00
??? 你知道这个语句一秒钟要执行多少遍吗哈哈哈
有个 Schedule 的库,自己去搜搜
Chenamy2017
2020-10-16 13:25:49 +08:00
加 sleep 即可,时间也不要用==,超过这个时间后就执行动作。
Sapp
2020-10-16 13:34:45 +08:00
你这个时间必出坑...
kimqcn
2020-10-16 13:37:19 +08:00
谁把我的代码偷出来了呵呵呵
Vhc001
2020-10-16 13:37:32 +08:00
这是我见过最坑爹的代码
Chaidu
2020-10-16 13:39:48 +08:00
建议转行 (狗头
Tokiomi
2020-10-16 13:43:55 +08:00
哈哈哈,学生代码吧
sudoy
2020-10-16 13:44:50 +08:00
谢谢大家回复,看来是用 sleep 比较合适。 @duyuyouci celery 可能比较重型了,我想尽量简单点,轻量级的。不过感谢推荐。 @vZexc0m APScheduler 看起来不错,不过还没有用过这个库,回头研究一下
est
2020-10-16 13:46:06 +08:00
其实底层库就是你这样实现的。只不过加了很多东西。比如上面说的要加个 sleep(1) 这就是你最小定时精度。

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

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

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

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

© 2021 V2EX