まず次のケースを見てみましょう。コードは次のとおりです
import sched import time def say_hello(name): print(f"Hello, world, {name}") scheduler = sched.scheduler(time.time, time.sleep) scheduler.enter(5, 1, say_hello, ("张三", )) scheduler.run()
上記のコードの最初のステップは、次のコードを通じてタイマーをインスタンス化することです。
import sched scheduler = sched.scheduler()
次に、enter()
メソッドを使用して、スケジュールされたタスクの操作を実行します。パラメーターは、遅延時間、タスクの優先度、特定の実行関数、および実行関数です。パラメータ。上記のようなコードは、5 秒の遅延後に実行されます。 say_hello()
Function
もちろん、遅延時間が等しい場合は、タスク実行の優先順位を設定して、 function メソッド たとえば、実行シーケンスは次のコードになります。
import sched import time def say_hello(name): print(f"Hello, world, {name}") def say_hello_2(name): print(f"Hello, {name}") scheduler = sched.scheduler(time.time, time.sleep) scheduler.enter(5, 2, say_hello, ("张三", )) scheduler.enter(5, 1, say_hello_2, ("李四", )) scheduler.run()
上記のコードと同様、遅延時間は同じですが、明らかに say_hello()
メソッドの優先度が高くなります。 say_hello_2 ()
メソッドよりも下位にあるため、後者が最初に実行されます。
関数の実行を遅らせるだけでなく、繰り返し実行させることもできます。具体的には次のようなコードです。
import sched import time def say_hello(): print("Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) def repeat_task(): scheduler.enter(5, 1, say_hello, ()) scheduler.enter(5, 1, repeat_task, ()) repeat_task() scheduler.run()
ここで作成しました。新しいrepeat_task()
カスタム関数、#scheduler.enter()メソッドを呼び出すと、以前に定義された
#say_hello()関数
##が1回ごとに実行されます。 5 秒 決まった時間にタスクを実行する
メソッドを使用します。コードは次のとおりです<pre class="brush:py;">import sched
import time
def say_hello():
print("Hello, world!")
scheduler = sched.scheduler(time.time, time.sleep)
# 指定时间执行任务
specific_time = time.time() + 5 # 距离现在的5秒钟之后执行
scheduler.enterabs(specific_time, 1, say_hello, ())
scheduler.run()</pre>
パラメータを使用すると、指定された時刻、つまり今から 5 秒後にタスクを実行できます。ここでも
メソッドを呼び出して複数のタスクを実行します。コードは次のとおりです。
import sched import time def task_one(): print("Task One - Hello, world!") def task_two(): print("Task Two - Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) # 任务一在两秒钟只有执行 scheduler.enter(2, 1, task_one, ()) # 任务二在五秒钟之后运行 scheduler.enter(5, 1, task_two, ()) scheduler.run()
と task_two# が定義されています。 ## は同じ実行ロジックを持ち、「Hello , world!」を出力すると、
task_one()
task_two() は 5 秒後に実行されます。両方の実行の優先順位は同じです。
異なる優先度で異なるタスクを実行する
今回は、
task_one() と
task_two()
import sched import time def task_one(): print("Task One - Hello, world!") def task_two(): print("Task Two - Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) # 优先级是1 scheduler.enter(2, 2, task_one, ()) # 优先级是2 scheduler.enter(5, 1, task_two, ()) scheduler.run()
タスク 1 - Hello, world!
タスク 2 - Hello, world!
上記のコード2 秒の停止後に
task_one()関数を実行し、3 秒の停止後にスケジュールされたタスク プラスキャンセル メソッドtask_two()
関数を実行します。
スケジュールされたタスクにキャンセル メソッドを追加します。コードは次のとおりです。
import sched import time def task_one(): print("Task One - Hello, world!") def task_two(): print("Task Two - Hello, world!") scheduler = sched.scheduler(time.time, time.sleep) # 任务一在两秒钟只有执行 task_one_event = scheduler.enter(2, 1, task_one, ()) # 任务二在五秒钟之后运行 task_two_event = scheduler.enter(5, 1, task_two, ()) # 取消执行task_one scheduler.cancel(task_one_event) scheduler.run()
2 秒後に実行される
task_one() メソッドをキャンセルします。 バックアップ スクリプトを作成しましょう毎日決まった時間にファイルをバックアップします コードは次のとおりです
import sched import time import shutil def backup_files(): source = '路径/files' destination = '路径二' shutil.copytree(source, destination) def schedule_backup(): # 创建新的定时器 scheduler = sched.scheduler(time.time, time.sleep) # 备份程序在每天的1点来执行 backup_time = time.strptime('01:00:00', '%H:%M:%S') backup_event = scheduler.enterabs(time.mktime(backup_time), 1, backup_files, ()) # 开启定时任务 scheduler.run() schedule_backup()
shutil モジュールの 最後に、定期的にメールを配信するプログラムを実行します。コードは次のとおりです
りー
以上がPython で sched モジュールを使用してスケジュールされたタスクを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。