APScheduler定期的なタスクフレームワーク

1.はじめに

APScheduler是一个Python**定时任务框架**,提供了**基于日期**、**固定时间间隔**以及**crontab**类型的任务,并且可以**持久化任务**。基于这些功能,我们可以很方便的实现一个python定时任务系统。

2.インストール

pip install apscheduler

3.一部

引き金(トリガー)は:タスクは、説明、日付、または時間間隔をトリガし、または三つの方法によってcronジョブ発現によってトリガされた場合、スケジューリング論理トリガを含んでいます。各ジョブには、初期構成に加えて、フリップフロップが完全にステートレスで、独自のトリガーを持っています。

ジョブメモリは(ジョブ店):ワーキングメモリの場所を指定し、ジョブがデータベースに格納されている場合、それをシリアル化するだろう、ジョブはデフォルトでメモリに格納され、ジョブは様々なデータベースに保存することができ、仕事に格納されていますそれがリロードされたときにデシリアライズさ。ジョブメモリは、保存、ロード、更新として機能し、仕事のブローカーを見つけます。スケジューラは、メモリ操作の間で共有することはできません。

アクチュエータ(執行):アクチュエータが指定されたジョブ(通話機能)は、スレッドプールまたはプール実行中のプロセス、タスクが完了したとき、アクチュエータ通知は対応するイベント・スケジューラをトリガに提出します。

スケジューラ(スケジューラ):タスクスケジューラは、実行し、フリップフロップ、追加、変更、およびタスクを削除し、その動作コンフィギュレーションメモリを通じて、制御ロールに属しています。スケジューラ連携トリガジョブメモリ、アクチュエータの動作は、通常はアプリケーションを実行するスケジューラは、開発者は通常、ワーキングメモリ、メモリを実行するように構成されたアクチュエータまたはトリガーのダイレクトなハンドリングを必要とせず、ジョブがで予定されていますそれが行われています。

4.仕事の操作

加えます

2番目のパラメータは、ジョブのスケジューリングを管理add_jobトリガ、です。それは、日付、時間間隔またはcronをすることができます。異なるトリガのため、同一のパラメータに対応します。

  • タイミングタスクを追加するadd_job()
import time
 
from apscheduler.schedulers.blocking import BlockingScheduler

def my_job():
    print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

sched = BlockingScheduler()
sched.add_job(my_job, 'interval', seconds=5)
sched.start()
  • タイミングタスクを追加するscheduled_job()修飾
import time
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
 
@sched.scheduled_job('interval', seconds=5)
def my_job():
    print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
sched.start()

取り除きます

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')

一時停止/再開

apsched.job.Job.pause()
apsched.schedulers.base.BaseScheduler.pause_job()

ジョブリストを取得します。

スケジュールされたジョブのリストを取得し、あなたが使用することができますget_jobs()完了し、それが仕事のすべてのインスタンスを返します。または使用した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()

閉じるスケジューラ

スケジューラは、すべてのスケジューラとジョブ保存を閉じた後、デフォルトで実行されているすべてのジョブの完了を待ちます。あなたは待ちたくない場合は、オプションがFalseに設定されて待つことができます。

sched.shutdown()
sched.shutdown(wait=False)

ジョブ制御動作

スケジューリングタイミングトウモロコシ

(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')

1571301599276

インターバルインターバルスケジューリング

  • パラメータ説明

    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 for the 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)

スケジュールのタイミング日

  • 一度だけの作業

    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
  • # 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'])

おすすめ

転載: www.cnblogs.com/bigox/p/11703415.html