threading.Timer
相当于一个定时器。 Timer 类是 Thread 类的子类,因此可以像一个自定义线程一样工作。
from threading import Timer
def hello(name):
print("hello,{}".format(name))
# 1s 后执行
Timer(1, hello, [name]).start()
apscheduler
文档
https://apscheduler.readthedocs.io/en/stable/userguide.html
pip install apscheduler
interval 时间间隔
另一个 corn 文档:
https://apscheduler.readthedocs.io/en/stable/modules/triggers/cron.html#module-apscheduler.triggers.cron
import datetime
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
@scheduler.scheduled_job('interval', minutes=1)
def minutes_task():
print 'haha'
# 12点到21点 的每个 0 分钟到 10分钟 执行一次
@scheduler.scheduled_job('corn', minute='0-10', hour='12-21')
def minutes_task():
print 'haha'
scheduler.start()
除了 BackgroundScheduler,其他选项请参考 APScheduler 官方文档,此处简单罗列:
BlockingScheduler:当调度程序是您的进程中唯一运行的东西时使用
BackgroundScheduler:当您不使用以下任何框架时使用,并且希望调度程序在您的应用程序的后台运行
AsyncIOScheduler:如果您的应用程序使用 asyncio 模块,请使用
GeventScheduler: 如果您的应用程序使用 gevent,请使用
TornadoScheduler:如果您正在构建 Tornado 应用程序,请使用
TwistedScheduler:如果您正在构建 Twisted 应用程序,请使用
QtScheduler: 如果您正在构建 Qt 应用程序,请使用
在 django 中使用 可以放在 app 的 Config 中的 ready() 中调用
class XXXConfig(AppConfig):
name = 'XXX'
def ready(self):
from .schedulers import scheduler
scheduler.start()
debug 模式下默认reload,所以启动时 可以使用
python manage.py runserver --noreload
来禁止调试模式下的两次触发
PyCharm 设置: