想实现一个简单的 Python 提醒喝水的算法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
douglas1997
V2EX    问与答

想实现一个简单的 Python 提醒喝水的算法

  •  1
     
  •   douglas1997 2019 年 4 月 18 日 2490 次点击
    这是一个创建于 2550 天前的主题,其中的信息可能已经有所发展或是发生改变。

    设想:

    1. 每天有 8 个在( 8 ~ 22 点)的随机时间点分布在这个时间段不同的小时,e.g. [9, 11, 13, 14, 16, 18, 19, 20] 2. 然后在这些时间点发送提醒消息 

    大家觉得怎么实现高效呢?我觉得如果先生成这 8 个时间点,再用一个 while 不断的阻塞 sleep&check 所有时间点很 naive,并且每天都要重复生成也很蠢。如何判断新的一天到来也是一个问题。

    emmm,对这种算法不是很熟。求指教~

    第 1 条附言    2019 年 4 月 19 日


    我写的 Python3 blocking 版本,尽量降低 datetime.now()的调用次数,删除了部分我的私人化代码。

    Good night ~
    14 条回复    2020-09-01 16:40:58 +08:00
    douglas1997
        1
    douglas1997  
    OP
       2019 年 4 月 19 日
    大佬都睡了吗 :(
    pual
        2
    pual  
       2019 年 4 月 19 日 via Android
    操作系统有时钟的 API, 注册时间断并监听
    nodwang
        3
    nodwang  
       2019 年 4 月 19 日 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 练手美滋滋
    douglas1997
        4
    douglas1997  
    OP
       2019 年 4 月 19 日
    @pual 嗯看来还是一个离不开系统中断的程序。

    @nodwang naive 版本好写一些。如果没有比较好的回复的话我就 Append 供其他人参考吧。
    nanaw
        5
    nanaw  
       2019 年 4 月 19 日 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
    zouchtssn
        6
    zouchtssn  
       2019 年 4 月 19 日
    at
    xujunfu
        7
    xujunfu  
       2019 年 4 月 19 日 via Android
    你需要的是闹钟,把精力和思考用在刀刃上吧
    douglas1997
        8
    douglas1997  
    OP
       2019 年 4 月 19 日
    @xujunfu 哈哈哈,是写给女票用的。每天微信提醒她喝水。
    douglas1997
        9
    douglas1997  
    OP
       2019 年 4 月 19 日
    @nanaw 嗯,看来这种任务还是阻塞式的简单,我现在在写一个把每次阻塞时间拉到尽量最长的程序。
    douglas1997
        10
    douglas1997  
    OP
       2019 年 4 月 19 日
    @zouchtssn 不用系统的,因为是随机的。
    geelaw
        11
    geelaw  
       2019 年 4 月 19 日 via iPhone
    用 Windows Task Scheduler 就行,自带随机延迟,你只需要写一个发送提醒的程序。
    tcpdump
        12
    tcpdump  
       2019 年 4 月 19 日
    喝水都需要提醒?
    c4f36e5766583218
        13
    c4f36e5766583218  
       2019 年 4 月 19 日
    多喝热水
    AllenHua
        14
    AllenHua  
       2020 年 9 月 1 日
    最近刚好关注到这方面 哈哈哈

    看到 12l 的 喝水都要提醒 瞬间笑了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3117 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:18 PVG 22:18 LAX 07:18 JFK 10:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86