首页 > 编程知识 正文

python做定时屏保(python设置定时自动运行文件)

时间:2023-05-03 13:36:09 阅读:75894 作者:66

Ap计划程序介绍

在正常工作中,几乎一半的功能模块需要计时器任务。 例如,项目包括计时器聚集程序、通过计时器离开站点的URL程序以及通过计时器检测网络钓鱼站点的程序,这些都与计时器任务有关。 我首先想到的是使用time模块的time.sleep ) )方法暂停程序以实现计时器任务的目的,我认为这很好,但不太专业。

Ap计划程序基于Quartz的Python时间任务框架,实现了Quartz的所有功能,易于使用。 提供基于日期、时间间隔和crontab类型的任务,允许任务持久化。 基于这些功能,我们可以很容易地实现python定时任务系统。

安装

1、使用pip安装

pip安装Ap计划程序

2、安装源代码(https://pypi.python.org/pypi/AP scheduler /

python setup.py install

AP计划程序有四个组成部分。

“触发器”(trigger )包含调度逻辑,每个作业都有自己的触发器,用于确定下一个要运行的作业。 除了他们自己的初始配置意外,触发器完全是无状态的。

“作业存储”(job store )存储调度作业,默认作业存储简单地将作业存储在内存中,其他作业存储将作业存储在数据库中。 一个作业的数据在保存到持久化作业存储时序列化,在加载时反序列化。 调度程序不能共享同一作业存储。

“执行器”(executor )处理作业的执行。 他们通常通过将在作业中创建的可调用对象提交给线程或进入城堡来完成。 工作完成后,执行机构会通知调度程序。

调度程序是其他组件。 你通常在APP应用程序中只有一个调度程序。 APP应用程序的开发者通常不直接处理工作存储、调度程序和触发器。 相反,调度程序提供了处理它们的适当接口。 可以在调度器中配置作业存储和执行器,如添加、修改和删除作业。

我个人认为Ap计划程序是非常好用的理由。 提供7种调度器,可以满足我们不同场景的需要。 例如,在后台执行某个操作,异步执行操作等。 调度程序如下:

BlockingScheduler :调度程序在当前进程的主线程上运行。 这意味着阻止当前线程。

后台调度程序在后台线程上运行,不会阻止当前线程。

AsyncIOScheduler :与异步框架asyncio模块配合使用。

GeventScheduler :程序使用高性能的Python并发框架(gevent )作为IO模型,并与GeventExecutor配合使用。

在TornadoScheduler :程序中使用Tornado(web框架)的IO模型,并在ioloop.add_timeout中完成定时唤醒。

TwistedScheduler :结合TwistedExecutor,在reactor.callLater上完成定时唤醒。

Qt计划程序:您的APP应用程序是Qt APP应用程序,需要使用QTimer完成定时唤醒

简单的APP应用程序:

importtimefromapscheduler.schedulers.blockingimportblockingschedulerdefmy _ job (3360打印时间. strftime (% y-% )

sched=BlockingScheduler ()

sched.add_job(my_job,' interval ',seconds=5) )。

sched.start (

以上示例说明每5s运行一次my_job函数,并输出当前时间信息

操作作业

1 .增加工作

以上是使用add_job ()添加作业的方法。 scheduled_job ) )也可以用修饰符修饰函数

importtimefromapscheduler.schedulers.blockingimportblockingscheduler

sched=BlockingScheduler ()

@ sched.scheduled _ job (间隔) seconds=5) defmy_job ) :printtime.strftime ) %y-%m-%d%h3330

sched.start (

2 .删除工作

job=scheduler.add_job(myfunc,' interval ',minutes=2) )。

job.remove(#如果有多个任务序列,则可以为每个任务设置ID号。 可以根据ID号选择要清除的对象,remove只有放在start之前才会生效

>sched.add_job(myfunc, 'interval', minutes=2, id='my_job_id')

sched.remove_job('my_job_id')

3. 暂停和恢复作业

暂停作业:

apsched.job.Job.pause()

apsched.schedulers.base.BaseScheduler.pause_job()

恢复作业:

apsched.job.Job.resume()

apsched.schedulers.base.BaseScheduler.resume_job()

4. 获得job列表

获得调度作业的列表,可以使用get_jobs()来完成,它会返回所有的job实例。或者使用print_jobs()来输出所有格式化的作业列表。也可以利用get_job(任务ID)获取指定任务的作业列表

job = sched.add_job(my_job, 'interval', seconds=2 ,id='123')print sched.get_job(job_id='123')print sched.get_jobs()

5. 关闭调度器

默认情况下调度器会等待所有正在运行的作业完成后,关闭所有的调度器和作业存储。如果你不想等待,可以将wait选项设置为False。

sched.shutdown()

sched.shutdown(wait=False)

作业运行的控制(trigger)

add_job的第二个参数是trigger,它管理着作业的调度方式。它可以为date, interval或者cron。对于不同的trigger,对应的参数也相同。

(1). cron定时调度(某一定时时刻执行)

(int|str) 表示参数既可以是int类型,也可以是str类型

(datetime|str) 表示参数既可以是datetime类型,也可以是str类型

year (int|str) – 4-digit year -(表示四位数的年份,如2008年)

month (int|str) – month (1-12) -(表示取值范围为1-12月)

day (int|str) – day of the (1-31) -(表示取值范围为1-31日)

week (int|str) – ISO week (1-53) -(格里历2006年12月31日可以写成2006年-W52-7(扩展形式)或2006W527(紧凑形式))

day_of_week (int|str) – number or name of weekday (0-6 or mon,tue,wed,thu,fri,sat,sun) - (表示一周中的第几天,既可以用0-6表示也可以用其英语缩写表示)

hour (int|str) – hour (0-23) - (表示取值范围为0-23时)

minute (int|str) – minute (0-59) - (表示取值范围为0-59分)

second (int|str) – second (0-59) - (表示取值范围为0-59秒)

start_date (datetime|str) – earliest possible date/time to trigger on (inclusive) -(表示开始时间)

end_date (datetime|str) – latest possible date/time to trigger on (inclusive) -(表示结束时间)

timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations (defaults to scheduler timezone) -(表示时区取值)

参数的取值格式:

例子:

#表示2017年3月22日17时19分07秒执行该程序

sched.add_job(my_job, 'cron', year=2017,month = 03,day = 22,hour = 17,minute = 19,second = 07)#表示任务在6,7,8,11,12月份的第三个星期五的00:00,01:00,02:00,03:00 执行该程序

sched.add_job(my_job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')#表示从星期一到星期五5:30(AM)直到2014-05-30 00:00:00

sched.add_job(my_job(), 'cron', day_of_week='mon-fri', hour=5, minute=30,end_date='2014-05-30')#表示每5秒执行该程序一次,相当于interval 间隔调度中seconds = 5

sched.add_job(my_job, 'cron',second = '*/5')

(2). interval 间隔调度(每隔多久执行)

weeks (int) – number of weeks to wait

days (int) – number of days to wait

hours (int) – number of hours to wait

minutes (int) – number of minutes to wait

seconds (int) – number of seconds to wait

start_date (datetime|str) – starting point forthe interval calculation

end_date (datetime|str) – latest possible date/time to trigger on

timezone (datetime.tzinfo|str) – time zone to use for the date/time calculations

例子:

#表示每隔3天17时19分07秒执行一次任务

sched.add_job(my_job, 'interval',days = 03,hours = 17,minutes = 19,seconds = 07)

(3). date 定时调度(作业只会执行一次)

run_date (datetime|str) – the date/time to run the job at -(任务开始的时间)

timezone (datetime.tzinfo|str) – time zone for run_date if it doesn’t have one already

例子1:

#The job will be executed on November 6th, 2009

sched.add_job(my_job, 'date', run_date=date(2009, 11, 6), args=['text'])#The job will be executed on November 6th, 2009 at 16:30:05

sched.add_job(my_job, 'date', run_date=datetime(2009, 11, 6, 16, 30, 5), args=['text'])

例子2:

from apscheduler.schedulers.blocking importBlockingSchedulerimportdatetimedefaps_test():print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '你好')

scheduler=BlockingScheduler()#表示2017年3月22日17时19分07秒执行该程序

scheduler.add_job(aps_test, 'cron', year=2019, month=3, day=22, hour=17, minute=19, second=30)#表示任务在6,7,8,11,12月份的第三个星期五的00:00,01:00,02:00,03:00 执行该程序

scheduler.add_job(aps_test, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')#表示从星期一到星期五5:30(AM)直到2014-05-30 00:00:00

scheduler.add_job(aps_test(), 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2014-05-30')#表示每5秒执行该程序一次,相当于interval 间隔调度中seconds = 5

scheduler.add_job(aps_test, 'cron', second='*/5')

scheduler.add_job(aps_test, trigger='cron', second='*/5')

scheduler.start()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。