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

2019-08-02 02:05:14 +08:00
 yellowtail
试图用过 schedule 失败了,非专业。。水平太差只会一点基础的。。。求大佬们点拔一下。。。
3873 次点击
所在节点    Python
20 条回复
binux
2019-08-02 02:21:55 +08:00
写两个任务调度
lalalakakaka
2019-08-02 03:26:13 +08:00
直觉直接 sleep 就行,单循环,单做一个 check 时间合法性的函数,这个函数负责检查是否时间超期。
check()==True 就继续运行,不然就 continue。任务函数直接阻塞式运行。

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

windows 操作系统可以用 ScheduleTask (管理工具中的任务计划程序)或在命令行使用 at 命令定时任务。
yellowtail
2019-08-02 16:38:26 +08:00
@zhchyu999 就是周一到周五。。。
yellowtail
2019-08-02 16:40:09 +08:00
@supervipcard 谢谢
lance86
2019-08-02 16:48:23 +08:00
就像 14 楼说的,系统自带的 crontab 就行并且最稳,你这个需求写两行就行,分别是上午和下午的。
另外如果你还要判定什么节假日,可以再写一个 python 程序来调用你本来要运行的任务,在这个 python 程序里判断是不是节假日,如果是的话就不执行任务,这样子还可以保持 crontab 不变。
SenLief
2019-08-02 19:18:56 +08:00
如果是 Linux 平台的可以用 crontab,当然了最好是用系统新的定时任务工具,systemd.timer
yellowtail
2019-08-02 20:30:43 +08:00
@supervipcard 这是 apscheduler 吧 如果想从九点半开始呢。。
yellowtail
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')这样的写法看着只能用在整数时间范围 如果我想九点半开始或者一个准确到秒的时间的话 大佬们看看应该怎么改呢。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/588384

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX