一个不到 100 行的 Python crontab 实现如何使用?
https://github.com/intohole/pyct
主要是大家可以看看思路,我写这个用了很短时间,如果有什么需求可以提给我
一个不到 100 行的 Python crontab 实现如何使用?
不知道。
我来给你一个简单的例子。这个实现通常是通过 schedule 库来完成的,它提供了类似 crontab 的定时任务功能。
首先安装库:
pip install schedule
然后看个完整示例:
import schedule
import time
from datetime import datetime
def job1():
"""每分钟执行的任务"""
print(f"[{datetime.now()}] 每分钟执行的任务")
def job2():
"""每天10:30执行的任务"""
print(f"[{datetime.now()}] 每天10:30执行的任务")
def job3():
"""每周一10:30执行的任务"""
print(f"[{datetime.now()}] 每周一10:30执行的任务")
def job4():
"""每5秒执行的任务"""
print(f"[{datetime.now()}] 每5秒执行的任务")
# 设置定时任务
schedule.every(1).minutes.do(job1) # 每分钟
schedule.every().day.at("10:30").do(job2) # 每天10:30
schedule.every().monday.at("10:30").do(job3) # 每周一10:30
schedule.every(5).seconds.do(job4) # 每5秒
print("定时任务已启动,按 Ctrl+C 停止")
# 主循环
try:
while True:
schedule.run_pending() # 运行所有到期的任务
time.sleep(1) # 每秒检查一次
except KeyboardInterrupt:
print("\n定时任务已停止")
基本用法:
- 定义你的任务函数
- 用
schedule.every()设置执行频率 - 在主循环中调用
schedule.run_pending()
常用时间设置:
every(10).minutes- 每10分钟every().hour- 每小时every().day.at("14:30")- 每天14:30every().monday.at("09:00")- 每周一9:00every().minute.at(":30")- 每分钟的第30秒
这个库的优点是简单直观,适合小型项目或脚本。对于生产环境的大型应用,建议使用 Celery 或 APScheduler。
一句话总结:用 schedule 库可以快速实现简单的定时任务。
很多地方不太 Pythonic 啊
if is True:
https://github.com/intohole/pyct/blob/master/pyct/pyct.py#L81 这是 typo 吧
各种长段的 elif 可以用 dict 代替
condition_type 和 time_range , 这明明是个 enum ,为什么枚举用字符串做?
你是其他语言转 Python 的吧?不光要学会用 Python 写出能跑的程序,还要学着 Pythonic 起来
仅对楼上, pythonic 是指把 python 语法糖玩的很溜?
1. 至少可以减少低级 typo
2. enum 用字符串和用 dict 是 O(n)和 O(logn)的区别
3. enum 也算语法糖? C 里就有的 enum switch 叫语法糖?你可以找找 Abusing the C switch statement
最后, gmtime 是 UTC , cron 应该是跟随系统时区
Duplicate with /t/352016
CTItem 的 equal 函数实现的有问题啊
建议改用 multiprocessing
嗯 我工作的时候用 java , 也写 js , shell , c , c++ 我觉得抠语言没意思 , 写东西 写的是思想,我们不是文豪 东西写出来 , 有用 , 能让人看懂就好
谢谢你的指点
谢谢
请指教
啊啊啊,刚刚看见。我说一下我的感觉哈:<br>def __eq__(self , obj):<br> if isinstance(obj , int):<br> for condition in self.conditions:<br> if condition.judge(obj) is True:<br> return True<br> return False<br>
对应的逻辑是这个意思?:<br>def __eq__(self , obj):<br> if isinstance(obj , int):<br> for condition in self.conditions:<br> if condition.judge(obj) is False:<br> return False<br> return True<br>
我看下 谢谢

