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

    目前想到的是

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

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


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