请教一个问题,如何创建一个在指定时间执行的一次性任务。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xgq89757
V2EX    Python

请教一个问题,如何创建一个在指定时间执行的一次性任务。

  •  
  •   xgq89757 2021-04-27 11:51:15 +08:00 3591 次点击
    这是一个创建于 1630 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前想到的是

    1. 轮训任务表
    2. 使用数据库事件,可能要结合存储过程
    26 条回复    2021-04-29 09:57:01 +08:00
    TimePPT
        1
    TimePPT  
    PRO
       2021-04-27 12:35:05 +08:00
    如果仅仅是简单任务,最简单的就是 crontab 起个定时任务,到点了调用下 Python 脚本
    如果是 Python Server 定时任务,方法很多
    troilus
        2
    troilus  
       2021-04-27 12:44:20 +08:00   1
    crontab, 特别好用
    masterclock
        3
    masterclock  
       2021-04-27 13:18:12 +08:00
    简单任务 cron 、systemd
    巨复杂的 airflow 类工作流引擎
    自定义的 temporal 、cadence
        4
    xgq89757  
    OP
       2021-04-27 14:05:35 +08:00
    @TimePPT 想具体某一天执行,执行后任务就销毁。
    xgq89757
        5
    xgq89757  
    OP
       2021-04-27 14:07:42 +08:00
    @troilus 这个会循环执行,主要是想做一次性任务。未来的某一天的某一个时间执行完就结束。
    xgq89757
        6
    xgq89757  
    OP
       2021-04-27 14:09:55 +08:00
    @masterclock 主要是想搞具体到日期的一次性任务,后面这些还都没听说过,我顺便学下。
    bigpigeon
        7
    bigpigeon  
       2021-04-27 14:11:12 +08:00
    写个脚本
    sleep xxx
    do some thing
    0ZXYDDu796nVCFxq
        8
    0ZXYDDu796nVCFxq  
       2021-04-27 14:13:17 +08:00 via Android   1
    不要用 cron,用 at
    SjwNo1
        9
    SjwNo1  
       2021-04-27 14:13:21 +08:00
    在脚本里限制执行条件不就可以了吗
    xanawang
        10
    xanawang  
       2021-04-27 14:15:36 +08:00
    那就一个骚操作吧 脚本的最后调用系统命令把 crontab 那行删掉再把自己删掉
    sujin190
        11
    sujin190  
       2021-04-27 14:16:23 +08:00   1
    xgq89757
        12
    xgq89757  
    OP
       2021-04-27 14:18:24 +08:00
    @gstqc at 不错,学到了。
    mysql 的事件可以做一次性任务,较复杂的业务可能要结合存储过程,貌似很多公司不建议用 事件和存储过程。
    xgq89757
        13
    xgq89757  
    OP
       2021-04-27 14:21:09 +08:00
    @xanawang 这个确实骚 恍恍惚惚
    yqmac
        14
    yqmac  
       2021-04-27 14:51:22 +08:00
    crontab 里面指定执行的年月日时分秒以后还能重复执行?只能执行一次了
    ryd994
        15
    ryd994  
       2021-04-27 16:59:00 +08:00
    @yqmac crontab 里没法指定年
    分时日月星
    WeKeey
        16
    WeKeey  
       2021-04-27 17:01:42 +08:00
    RabbitMQ 延时队列
    timethinker
        17
    timethinker  
       2021-04-27 17:03:37 +08:00
    按照你想到的这两种方法,我觉得第一种是可行的,定时扫描任务表,处理任务,然后删除或标记为已处理。
    这样当你处理任务的时候,参与事务,如果任务处理失败,下一次定时扫描还可以重试(因为任务的删除操作或标记操作随着失败被一同回滚了,因此下一次执行仍然可以达成执行条件)。

    取决于你目前现有的技术框架,如果增加一个这样的定时任务表很简单的话那就按照简单的来做。
    mlcq
        18
    mlcq  
       2021-04-27 17:10:09 +08:00
    Scheduled 指定几月几日,然后代码里做个判断,满足条件才执行,一年最多就做一次判断吧,也没关系了
    mlcq
        19
    mlcq  
       2021-04-27 17:10:59 +08:00
    @mlcq #18 看错了,不好意思,以为用的 java
    zhoudaiyu
        20
    zhoudaiyu  
    PRO
       2021-04-27 19:58:47 +08:00 via iPhone
    Celery 啦
    gengzi
        21
    gengzi  
       2021-04-27 23:16:56 +08:00
    crontab
    fiypig
        22
    fiypig  
       2021-04-28 07:49:04 +08:00 via iPhone
    定时器开关呗,还可以设置时间,开关
    guancyxx4king
        23
    guancyxx4king  
       2021-04-28 09:11:58 +08:00
    celery 延时任务
    no1xsyzy
        24
    no1xsyzy  
       2021-04-28 12:26:15 +08:00
    celery
    话说,cron/crontab 如果系统是关闭状态就无法启动
    at 似乎能在启动后第一时间(或者如果用了 batch 或者大写字母开头的队列名的话是启动后的空闲时间)发动任务
    danseguang
        25
    danseguang  
       2021-04-28 17:28:06 +08:00
    方法:
    1.crontab 配置触发时间
    2.数据库中有一个 status 字段控制任务状态,eg: 0 未执行,1 已执行-成功,2 已执行-失败,3 正在执行


    触发时间到,先将 mysql 中的状态变为 3,避免其他人执行,执行完成后,再根据具体状态回写 mysql
    xgq89757
        26
    xgq89757  
    OP
       2021-04-29 09:57:01 +08:00
    感谢大家题的方案,发现 apscheduler 不错。date 方式可以满足需求
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1048 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 23:02 PVG 07:02 LAX 16:02 JFK 19:02
    Do have faith in what you're doing.
    ubao 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