设想:
1. 每天有 8 个在( 8 ~ 22 点)的随机时间点分布在这个时间段不同的小时,e.g. [9, 11, 13, 14, 16, 18, 19, 20]
2. 然后在这些时间点发送提醒消息
大家觉得怎么实现高效呢?我觉得如果先生成这 8 个时间点,再用一个 while 不断的阻塞 sleep&check 所有时间点很 naive,并且每天都要重复生成也很蠢。如何判断新的一天到来也是一个问题。
emmm,对这种算法不是很熟。求指教~
1
douglas1997 OP 大佬都睡了吗 :(
|
2
pual 2019-04-19 00:41:23 +08:00 via Android
操作系统有时钟的 API, 注册时间断并监听
|
3
nodwang 2019-04-19 00:44:17 +08:00 via Android
我自己用 go 写了一个,就是你说的 naive 版本,
流程是: 1,开机启动,初始化 40 天查询是否工作日,存到 sqlite。 2,初始化一次当天和第 40+天,检查当天是否工作日,非工作日 sleep 1 小时,直到当天结束。 3,工作日:sleep 30 分钟 & check 时间是否在 9-12,13-18 之内 ,如果是 提醒 然后 sleep。 4,goto 2。 上面数字 30,40,9,12,13,18 都是启动时 flag 参数控制 ,初始化时顺便 抓了 bing 每日壁纸,windows 锁屏壁纸,新手 go 练手美滋滋 |
4
douglas1997 OP |
5
nanaw 2019-04-19 00:59:06 +08:00 via Android
每 2 小时无需获取时间:
x=y=0 while 1: x=y;y=randint(1,60);sleep(60*60*2-120*x+120*y) #action 定时任务 每天 7 点执行 分布不均匀的话再加 if |
6
zouchtssn 2019-04-19 01:01:01 +08:00
at
|
7
xujunfu 2019-04-19 01:04:15 +08:00 via Android
你需要的是闹钟,把精力和思考用在刀刃上吧
|
8
douglas1997 OP @xujunfu 哈哈哈,是写给女票用的。每天微信提醒她喝水。
|
9
douglas1997 OP @nanaw 嗯,看来这种任务还是阻塞式的简单,我现在在写一个把每次阻塞时间拉到尽量最长的程序。
|
10
douglas1997 OP @zouchtssn 不用系统的,因为是随机的。
|
11
geelaw 2019-04-19 06:02:50 +08:00 via iPhone
用 Windows Task Scheduler 就行,自带随机延迟,你只需要写一个发送提醒的程序。
|
12
tcpdump 2019-04-19 09:46:49 +08:00
喝水都需要提醒?
|
13
c4f36e5766583218 2019-04-19 10:50:13 +08:00
多喝热水🌺🐔
|
14
AllenHua 2020-09-01 16:40:58 +08:00
最近刚好关注到这方面 哈哈哈
看到 12l 的 喝水都要提醒 瞬间笑了 |