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
yellowtail
V2EX  ›  Python

新手想实现一个工作日早九开始晚九结束,十二到一停一个小时,工作期间每五分钟运行一次的任务调度

  •  
  •   yellowtail · 2019-08-02 02:05:14 +08:00 · 4038 次点击
    这是一个创建于 1926 天前的主题,其中的信息可能已经有所发展或是发生改变。
    试图用过 schedule 失败了,非专业。。水平太差只会一点基础的。。。求大佬们点拔一下。。。
    20 条回复    2019-08-06 10:21:37 +08:00
    binux
        1
    binux  
       2019-08-02 02:21:55 +08:00
    写两个任务调度
    lalalakakaka
        2
    lalalakakaka  
       2019-08-02 03:26:13 +08:00
    直觉直接 sleep 就行,单循环,单做一个 check 时间合法性的函数,这个函数负责检查是否时间超期。
    check()==True 就继续运行,不然就 continue。任务函数直接阻塞式运行。

    你考虑下自己需求,如果没有什么效率啊多任务啊的破事,这么做最稳健,还不容易出错。
    leishi1313
        3
    leishi1313  
       2019-08-02 04:16:35 +08:00 via Android
    我自己没用过不知道是不是满足你需求,但是你可以去看看 celery beat
    kyuuseiryuu
        4
    kyuuseiryuu  
       2019-08-02 07:57:42 +08:00 via iPhone
    逆向思维,先定义每五分钟执行一次的脚本,然后脚本里面判断满不满足运行时间要求再去执行具体内容或直接退出。
    asdf123101
        5
    asdf123101  
       2019-08-02 07:58:40 +08:00 via Android
    Jenkins job 可以写的吧
    zchlwj
        6
    zchlwj  
       2019-08-02 08:18:04 +08:00 via Android
    corn
    zhchyu999
        7
    zhchyu999  
       2019-08-02 08:20:11 +08:00 via Android
    工作日这个概念有点坑
    liuguichao
        8
    liuguichao  
       2019-08-02 08:26:40 +08:00
    方案一: 跨平台
    APScheduler 可以用来写调度
    https://pypi.org/project/APScheduler/
    方案二: linux crontab
    直接编辑配置文件即可满足要求
    luozic
        9
    luozic  
       2019-08-02 08:30:05 +08:00 via iPhone
    明白啥叫“工作日”否? 这儿问题的复杂点不是后面两个,而是啥时间就算工作日。
    hmxxmh
        10
    hmxxmh  
       2019-08-02 08:35:31 +08:00 via Android
    你可以看下 aps,python 的异步定时调度框架,应该可以满足你需求
    heZM
        11
    heZM  
       2019-08-02 08:52:11 +08:00
    quartz ?
    supervipcard
        12
    supervipcard  
       2019-08-02 08:59:34 +08:00   ❤️ 2
    scheduler.add_job(jobA, 'cron', day_of_week='mon-fri', hour='9-11,13-20', minute='*/5', id='job_a')
    exip
        13
    exip  
       2019-08-02 09:10:41 +08:00
    如何定义“工作日”?是 996 还是 965 还是 007 ?
    不如把“工作日”改成“每天”,这样就只需关注怎么实现任务调度,而这个是很简单的。
    xpresslink
        14
    xpresslink  
       2019-08-02 09:28:57 +08:00
    你这个需求直接用 LINUX 系统的 cronjob 就可以了,网上教程很多。你自己写的时间调度脚本稳定性可靠性都差得多,而且至少还要再写一个守护进程保持调度进程不挂掉。

    windows 操作系统可以用 ScheduleTask (管理工具中的任务计划程序)或在命令行使用 at 命令定时任务。
    yellowtail
        15
    yellowtail  
    OP
       2019-08-02 16:38:26 +08:00
    @zhchyu999 就是周一到周五。。。
    yellowtail
        16
    yellowtail  
    OP
       2019-08-02 16:40:09 +08:00
    @supervipcard 谢谢
    lance86
        17
    lance86  
       2019-08-02 16:48:23 +08:00   ❤️ 1
    就像 14 楼说的,系统自带的 crontab 就行并且最稳,你这个需求写两行就行,分别是上午和下午的。
    另外如果你还要判定什么节假日,可以再写一个 python 程序来调用你本来要运行的任务,在这个 python 程序里判断是不是节假日,如果是的话就不执行任务,这样子还可以保持 crontab 不变。
    SenLief
        18
    SenLief  
       2019-08-02 19:18:56 +08:00   ❤️ 1
    如果是 Linux 平台的可以用 crontab,当然了最好是用系统新的定时任务工具,systemd.timer
    yellowtail
        19
    yellowtail  
    OP
       2019-08-02 20:30:43 +08:00
    @supervipcard 这是 apscheduler 吧 如果想从九点半开始呢。。
    yellowtail
        20
    yellowtail  
    OP
       2019-08-06 10:21:37 +08:00
    scheduler.add_job(jobA, 'cron', day_of_week='mon-fri', hour='9-11,13-20', minute='*/5', id='job_a')这样的写法看着只能用在整数时间范围 如果我想九点半开始或者一个准确到秒的时间的话 大佬们看看应该怎么改呢。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2616 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:40 · PVG 09:40 · LAX 17:40 · JFK 20:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.