推荐学习书目
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 · Apr 27, 2021 · 4112 views
    This topic created in 1853 days ago, the information mentioned may be changed or developed.

    目前想到的是

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

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


    触发时间到,先将 mysql 中的状态变为 3,避免其他人执行,执行完成后,再根据具体状态回写 mysql
    xgq89757
        26
    xgq89757  
    OP
       Apr 29, 2021
    感谢大家题的方案,发现 apscheduler 不错。date 方式可以满足需求
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2677 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 466ea39e · 104ms · UTC 15:40 · PVG 23:40 · LAX 08:40 · JFK 11:40
    ♥ Do have faith in what you're doing.