我在做一个闹钟,等到谋个时间就开始执行谋个动作(在下面的案例里面简化为 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()
感谢大家的回复!根据大家的建议和帮助,我决定采用计算时间差然后用sleep的办法。其他办法比如用第三方库或者线程等方法也很好,但我希望尽量简单点。这个只需要精确到未来某个时间的秒即可。我更新代码如下,希望对其他新手有帮助:
from time import sleep
from datetime import datetime
def alarm():
now = datetime.now().timestamp()
set_time = datetime(2020, 10, 16, 22, 42, 50).timestamp()
delta = set_time - now
sleep(delta)
print('ok')
if __name__ == '__main__':
alarm()
101
neoblackcap 2020-10-17 20:03:17 +08:00 1
@sudoy sleep 问题不大,因为底层就是这样干的。要求精度不是很高的时候,这样干没啥问题。不过定时器是一个比较敏感的问题,很多人考虑的问题的维度是不一样的。有些人是需要高精度的定时器,有些人是需要硬实时的定时器,有些是需要真实墙上时间的定时器。
需求不一样,会产生的回答也不一样。认清楚自己的需求,写符合满足自己需求的程序就好了。很多人说用 XX 技术,其实你根本没有这个需要,为何要做更多无意义的事情呢?比如 timerfd + I/O multiplexing 。可以支持的精度很高,有意义么? 自己去走一走才知道鞋子合不合穿,加油吧 |
102
sudoy OP @neoblackcap 是的,讲的真好。能实现目的,然后尽量少占用资源就够了
|
104
crella 2020-10-18 20:47:37 +08:00 via Android
这给人感觉连 c 语言考试都没过的感觉,运行一下就发现 cpu 占用 100%啦
以后不想看某些区了 |
105
crella 2020-10-18 20:51:46 +08:00 via Android
更正:是 cpu 单核占用 100%。
某台洋垃圾的六核十二线程 cpu 用 wps 打开大文档卡死,一看:只吃单核。 |