例でPython Timerクラスを理解する

Pythonには、コーダーの要求を満たすための何千ものモジュールとライブラリがあります。 しかし、それらを有用にするには、最初にそれらを理解してから適用する必要があります。 特定のモジュールの事前知識がなければ、何をしたいのか、モジュールが実際に何をしているのかは不明です。 時間は符号化問題における重要な要素の一つである。 すべてのコードは、その強力なアルゴリズムを使用して、人間の仕事を減らすためのものです。 時間管理は、コードのパフォーマンスの分析に大きな影響を与えます。 そのため、今日はPythonでタイマーがどのように機能するかについて詳しく学びます。

Python Timerは、コードの時間の複雑さを管理するためのクラス/ライブラリです。 複数の時間モジュールを使用すると、コード内にシステムを作成して、それぞれのコードスニペットにかかった時間を確認できます。 Pythonには、pythonタイマー関数(スクリプトの実行時間を確認する)、pythonスレッドタイマー(スレッドが終了するまでにかかる時間を確認する)、pythonカウントダウンタイマー(カ

これらのタイマー実装はすべて異なる機能を持ち、エンドユーザーに異なる用途を提供することに焦点を当てています。 この記事では、すべてのtimer実装を詳細に説明します。 目次を使用して、それぞれのpythonタイマーの実装にジャンプできます。

カタログ

基本的なPythonタイマー関数

時間に関するpythonで最も重要なモジュールは時間です。 このモジュールは、時間をチェックし、それを分析するためのすべての基本的な機能が含まれています。 この分析は、コードのパフォーマンスとその効率を理解するのに役立ちます。 このモジュールの重要な機能のそれぞれとその例を見ていきます。

timeモジュールを使用する基本的なPythonタイマー関数は次のとおりです–

  • 時間だ時間()
  • 時間。thread_time()
  • 時間。process_time()
  • 時間。perf_counter()
  • 時間。単調性()

機能時間。time

time.time()エポックの後の時間を秒単位(float)で返します。 一般的に、エポックは1月に設定されています1, 1970, 00:00:00 (このエポックが返された後の秒数。 この機能は、秒数を計算するためのコンピュータ時間に依存します。 Pythonの実行の間にコンピュータの時間を変更すると、この関数を使用して奇妙な数字を取得できます。

import timestart = time.time() #start timefor i in range(1000000): passend = time.time()print("Elapsed time is {}".format(end-start))

説明-

まず、timeモジュールのインポートから始めます。 このモジュールには、このセクションで使用するすべての基本的な時間関数が含まれています。 コードの開始時に、start変数を time.time()として宣言します。 これにより、cpuの現在の時刻がエポックからの浮動小数点数に格納されます。 このstart変数を時間を測定するための基準点として使用します。 次の部分には、使用するすべてのコードが含まれています(この例では、forループを使用しました)。 同様に、CPUの終了時刻(デフォルト時刻)を記録し、end–startを使用して合計実行時間を確認します。

これにより、コードにかかった時間が秒単位で出力されます。 この手法を使用すると、コードにかかった時間を確認できます。 この方法の唯一の問題は、コードの実行中にCPU時間を変更できることです。 これにより、python timerで問題のある動作が発生します。

Thread_time

time.thread_time()は、現在実行中のスレッドのシステム時間とCPU時間の合計(float)を返します。 また、time.sleep()関数に費やす時間は含まれていません。 この関数はスレッド固有のものであるため、時間参照が同じスレッドに属している限り、この関数を使用して時間差を記録できます。

import timeimport threadingend = Nonestart = Nonedef hello(): global start, end start = time.thread_time() x = 0 while x < 10000000: pass x += 1 end = time.thread_time()t = threading.Thread(target = hello, args = ())t.start() t.join()print("The time spent is {}".format(end - start))

説明-

thread_timeはスレッド固有の時間を返すので、同じスレッドで参照を使用するようにする必要があります。 この目的のために、関数’hello’のスレッドをインスタンス化し、その中のスレッドにかかった時間を計算しました。”hello”を使用すると、関数’hello’のスレッドがこんにちは ただし、thread_time()を呼び出して現在の時刻を取得できないことを確認してください。 しかし、同じスレッドに属している限り、2つの連続した参照の違いを確実に確認することができます。

Process_time

time.process_time() は、現在の進行状況のシステム時間とCPU時間の合計の小数秒(float)で時間参照を返します。 Thread_timeと同じように、この関数はtime.sleep()関数で費やされた時間を測定しません。 さらに、この関数はプロセスに基づいて参照を作成します。 この結果、2つの連続した参照の間の時間差だけが意味をなさないでしょう。

from time import process_time, sleepiterations = 100000start = process_time() for i in range(iterations): print(i, end=" ") # Stop the stopwatch / counter end = process_time()print(end, start)print("Elapsed time in seconds:", end-start)

説明-

まずprocess_time関数をインポートし、コード間の開始時刻と終了時刻を記録します。 従来のtime.time()time.proces_time()の唯一の違いは、処理時間が現在のプロセスの時間参照を記録するのに対し、time()はシステムの絶対時間を記録することです。

Perf_counter

Perf Counterはパフォーマンスカウンタの略です。 この関数は、短時間有効な時間の高解像度値を返します。 この関数は、2つの参照間の正確な時間カウントを取得するために使用されます。 他のpythonタイマー関数には睡眠時間が含まれていないため、perf_counterにも含まれていません。 例に移動してみましょう–

例–

from time import perf_counter, sleep # integer input from user, 2 input in single linen = 3 # Start the stopwatch / counter start = perf_counter() for i in range(n): sleep(1)end = perf_counter() print("Elapsed time in seconds:", end-start) 

説明-

perfカウンタは、プロセスタイマーやスレッドタイマーと同じ方法で使用できます。 唯一の違いは、perfカウンタは経過時間の高い正確な値を返すことです。 しかし、高精度を使用するため、小さなプロセス間でこれを使用するようにしてください。 単純なループを使用して、それにかかる時間を確認しました。

monotonic

Monotonicは後方に行くことができないpythonタイマーです。 Pythonスクリプトを実行するとき、時間はユーザーによって変更され、pythonでのタイマーの実装に大きな違いを生む可能性があります。 しかし、単調なタイマは、時間参照が外部の変化に調整されることを保証します。

from time import monotonic, sleep # integer input from user, 2 input in single linen = 3 # Start the stopwatch / counter start = monotonic() for i in range(n): sleep(1)end = monotonic() print("Elapsed time in seconds:", end-start) 

説明-

最初にtimeモジュールから単調関数をインポートします。 次に、コードの上部と下部にstartとendという名前の2つの参照を作成します。 これにより、2つの参照間の時間が測定され、システム時間に対するすべての外部変更が回避されます。

カスタムPythonタイマークラス

あなたはあなたの必要性に応じて物事を行うために、独自のカスタムタイマークラスを作成することができます。 カスタムクラスを作成する主な利点の1つは、すべての時間を1行で管理できることです。 毎回timeクラスをインポートして参照を記録する必要はありません。 また、あなたのデータをダンプし、あなたのための最良のアルゴリズムを選択するために、すべての過去の時間の実行を記録することができます。

このセクションでは、時間を管理し、コード内のすべての時間差を記録するためのカスタムクラスを作成します。

py–

timeモジュールをインポートすることから始めます。 次に、python Timerクラスを初期化し、属性とメソッドの定義を開始します。 これまでのところ、クラスの開始参照を保持するための基本属性のみが含まれています。 より複雑にするために、複数の属性を作成できます。 これまでのところ、以下の三つの方法があります–

  1. 開始-(任意)タイマーを開始します。
  2. log–開始時刻に関する現在の経過時間をログに記録します。
  3. milestone–タイマーをリセットし、カウントを0から開始します。
import timeclass Timer: def __init__(self): self.start = time.time() def start(self): self.start = time.time() def log(self): logger = time.time() - self.start print('Time log -',logger) def milestone(self): self.start = time.time()

example.py –

上記のクラスの使用例を以下に示します。 表示できるように、カスタムTimerクラスを作成することでコードをきれいに保ち、柔軟性を高めることができます。

import timertime = timer.Timer()for i in range(1000000):passp = 1time.log()for i in range(1000000):passp = 1time.log()

出力–

Time log - 0.054854631423950195Time log - 0.10871052742004395

スレッドを使用したPythonタイマー

何らかの操作を実行したい場合や、一定の時間後に関数を実行したい場合は、Python Timerクラスを使用します。 Timerクラスはthreadingクラスのサブクラスです。 技術的には、時間で囲まれたアクション(関数)が必要なときにTimerオブジェクトを作成すると言うことができます。

たとえば、参加者が10秒で各質問に答える必要があるクイズを整理したいとします。 ここでは、バックグラウンドで実行されるタイマーを作成することができ、一方、参加者は答えについて考えます。 ここで、timerオブジェクトの作成方法を理解しましょう。

PythonのTimerクラスの構文

Timerクラスが何をするのか理解していない場合は、このように考えることができます–Timerクラスは指定された秒数の後に関数を呼び

タイマーを開始するには、start()を呼び出す必要があります(通常のスレッドと同じように)、タイマーがバックグラウンドにある間にタイマーを停止するには、cancel()

Timerクラスを使用するには、threadingクラス

threadingをインポートする必要があります。Timer(interval,function,args=None,kwargs=None)

パラメータ-

Interval–次の関数を呼び出すまでに待機する時間(秒単位)。 Floatまたはintegerのいずれかにすることができます。 たとえば、3秒の場合、interval=3です。

Function–指定された時間間隔の後に呼び出す関数。

*argsおよび**kwargsパラメータを記述する一般的な方法は、-interval秒が経過した後に引数’args’およびキーワード引数’kwargs’で関数を実行するtimerオブジェクトを作成するこ Argsはリストの形式で、0キーワードargsまたはkwargsは辞書の形式でなければなりません。

戻り値の型-

パラメータで指定された関数を呼び出すだけです。

Timerクラスのメソッド

  1. start()–タイマーの実行の開始を意味します。
  2. Cancel()–タイマーの実行中に、停止したい場合はcancel()を呼び出すことができます。

Timerオブジェクトの作成

A. 基本の理解

Timerオブジェクトの動作を理解するために、クラスの基本を理解するのに役立つ小さなプログラムを作成しましょう。

# Importing the Timer subclass from the threading Classfrom threading import Timer# creating a basic function that will print "hello"def hello(): print ("hello, world")# creating the object of the Timer subclass# Here, 5 sec means that the execution of the function="hello" after 5 secondst = Timer(interval=5.0, function=hello)# starting the executiont.start() # after 30 seconds, "hello, world" will be printed
Output-hello, world
python timer

上記のプログラムを自分のシステムで実行しようとすると、上記のプログラムの機能をよりよく理解することができます。

b.cancelメソッドの使用

Timerクラスのcancel()関数の使用方法を見てみましょう。

# Importing the Timer subclass from the threading Classfrom threading import Timer# creating a basic function that will print "hello"def hello(): print ("hello world") # creating the object of the Timer subclass# Here, 5 sec means that the execution of the function="hello" after 5 secondst = Timer(interval=5.0, function=hello) # starting the executiont.start() # after 30 seconds, "hello, world" will be printedprint("Execution begins")# cancelling the execution of the 'hello' functiont.cancel()print("END")
Execution begins END

c. Pythonタイマークラスの’args’パラメータの使用方法

呼び出す必要がある関数に引数を与える必要がある場合は、argsパラメータを使用します。 配列にargs引数を指定する必要があります。

import threading# To take multiple inputs we can use *before the parameter.def print_name(*names): # From the array of names pick one name and print it for name in names: print("Hello",name)# In the args parameter, give an array of names t = threading.Timer(3, print_name,)# start the executiont.start()print("Execution begins...")
Execution begins...Hello AshwiniHello VandyHello Arijit

今、私たちは時間について多くのことを話してきたことを、ボーナスとして、私たちはカウントダウンタイマーとして機能するプログ

pythonでのカウントダウンタイマー

timeモジュールを使用した

# We will use the time moduleimport time# Create a function that will print the timedef create_countdown_timer(time): print(time,"......")time_in_sec=int(input("Please entert the time in seconds:"))for times in range(time_in_sec): # call the function and pass the current time left create_countdown_timer(time_in_sec-times) # call the function in every 1 second. time.sleep(1) print("Time is up")
Please entert the time in seconds:77 ......6 ......5 ......4 ......3 ......2 ......1 ......Time is up

python Timerクラスの使用

# We will use the time moduleimport timefrom threading import Timer# Create a function that will print the timedef create_countdown_timer(time): print(time,"......")# Here you have to enter the time for which the timer will runtime_in_sec=int(input("Please enter the time in seconds:"))# For the first time we will call the function manuallycreate_countdown_timer(time_in_sec) for times in range(1,time_in_sec): # calling the Timer class every second t = Timer(1,create_countdown_timer,) t.start() time.sleep(1) print("\n Time is up") 
Please entert the time in seconds:1010 ......9 ......8 ......7 ......6 ......5 ......4 ......3 ......2 ......1 ......Time is up

コンテキストマネージャとしてのPythonタイマー

コンテキストマネージャは、メモリエラーやその後のクラッシュを避けるための最良の方法です。 誰もがPythonの文を”with”について知っていたに違いありません。 この文は、独立して閉じるために多くのオブジェクトを処理する必要がないことを保証します。 誰もがwithとopen()関数の組み合わせでそれを使用したかもしれません。 では、主な質問に移りますが、Pythonタイマー用のコンテキストマネージャを作成できますか?

はい。 複数のオーバーロード関数のため、わずか数行でコンテキストマネージャとして独自のpythonタイマーを簡単に作成できます。 プログラムの実行時間を測定する必要がある例から始めましょう。 すべての変数を再定義することなく、1つのコンテキストマネージャを繰り返し使用して時間を複数回測定できます。 次のプログラムはそれを示しています。

import timeclass Timer_Pythonpool(): """ Context manager as a python timer """ def __init__(self): self.start = None def __enter__(self): """ Notes the time at the start of the iteration """ self.start = time.time() return self def __exit__(self, exc_type, exc_value, exc_traceback): """ Prints the time taken at the end of the iteration """ print("Time to finish the task: ", time.time()-self.start) with Timer_Pythonpool() as timer: for i in range(1000000): x = 0 pass

出力–

Time to finish the task: 0.05392050743103027

説明–

まず、”Timer_Pythonpool”という名前のクラスを作成します。”その後、我々はコンテキストマネージャとしてそれらを有用にするために演算子をカスタマ __enter__関数はコンテキストの開始時に実行され、__exit__はコンテキストの終了時に実行されます。 これらの2つの関数の間に参照点を作成すると、コンテキストが実行するのにかかる正確な時間が得られます。

Pythonタイマデコレータ

デコレータは、あらゆる種類の関数の追加サポートです。 また、メタプログラミングと呼ばれる、あなたはそれに機能を変更/追加することができます。 Pythonタイマデコレータは、pythonでタイマー関数を実装する最も簡単な方法です。 宣言されると、デコレータを知らなくても1行で使用できます。 これに加えて、コード内のすべての関数にそれらを適用して、実行に最も時間がかかるコードを確認することができます。

構文–

連鎖デコレータを作成するには、複数のネストされた関数を宣言する必要があります。 他の関数にメインのデコレータ名として名前を付け、任意のランダムな名前に内側に名前を付けます。 内部関数は、デコレータの下で使用される関数の参照を取得します。

import timedef check_time(func): def inner(*args, **kwargs): start = time.time() func(*args, **kwargs) end = time.time() print("Time taken to execute function is ", end-start) return inner@check_timedef task(): # do something for i in range(10000000): x = 0 passtask()

出力–

Time taken to execute function is 0.24933218955993652

説明-

いつものように、pythonの”time”から最も重要なモジュールをインポートすることから始めます。”次は、”check_time”という名前のデコレータを作成します。「その中に、時間の参照を作成できるネストされた内部関数を追加します。 これらの2つの参照は、両方が関数実行の間に配置されるように配置されます。

さらに、”task”という名前のテスト関数を作成して、タスクが機能するかどうかを確認します。 次に、その上にデコレータを追加します。 これで、デコレータはその魔法を実行し、関数にかかった時間を印刷します。

Python Timer Cooldown

Python Timer Cooldownは、タイマーを後方に測定する方法です。 カスタムtimerクラスを作成することで、コードのすべての時点で時刻を記録できます。 このクラスをモジュールとしてエクスポートし、コードに依存関係としてインストールできます。 その後、単一行を使用して、それをインポートすることができます–

import timeclass Timer: """ Timer class """ def __init__(self): self.start = time.time() ''' Restarts the timer. ''' def restart(self): self.start = time.time() ''' Returns the time elapsed and resets the counter. ''' def get_new_time(self): value = time.time() - self.start self.restart() return value ''' Prints the time elapsed and resets the counter. ''' def print_new_time(self): print (self.get_new_time()) ''' Returns the time elapsed (Does not reset the counter). ''' def get_time(self): return time.time() - self.start self.restart() ''' Prints the time elapsed (Does not reset the counter). ''' def print_time(self): print(self.get_time()) ''' Returns the time elapsed in HH:mm:ss (Does not reset the counter). ''' def get_time_hhmmss(self): end = time.time() m, s = divmod(end - self.start, 60) h, m = divmod(m, 60) time_str = "%02d:%02d:%02d" % (h, m, s) return time_strtimer = Timer() #Initialize the timer#wash clothes for 5 secondstimer.print_time() #Print the time elapsed since Initialization (in seconds)#dry clothes for 3 secondstimer.print_new_time() #Print the time elapsed since Initialization and reset the timer#burn clothes for 10 secondsprint(str('Task done for ' + str(timer.get_time()) + ' seconds.'))

その他のPythonタイマーモジュール

Pythonには何千ものモジュールと何百万ものコードスニペットが含まれています。 私たちはいつでもpythonタイマーを使うためにオープンソースのモジュールを使うことができます。 Githubはそのようなモジュールを見つける最大の場所です。 のは、これらのモジュールに右にジャンプしてみましょう–

  1. termdown:異なるASCII文字を使用して作られた高度なpythonタイマー。 このスクリプトを使用すると、端末で簡単なカウントダウンタイマーを作成し、最後にコマンドを実行することができます。 最も重要なのは、音声カウントダウンをサポートしています。
  2. Python:pythonで作られたGUIベースのタイマー。 このスクリプトは、複数のオプションを持つフルスクリーンベースのタイマを作成します。 それに伴い、このプログラムを使用して、同時に画面上で複数のタイマーを実行することができます。
  3. timer:これはpython(Tkinter)で作られた最も基本的なGUIベースのタイマーです。 複数のタイマー、ラベル、およびマルチスレッドのような機能は、他のプログラムの上に、それがより実行可能にします。
  4. codetiming:このtimerクラスは、特定の名前付きプロセスの過去のすべての実行時間を記録します。 特定のプロセスの最小時間、最大時間、その間、および中央値の時間をレコードとともに確認できます。 このモジュールは、コンテキストマネージャやデコレータとして、複数の方法で使用することができます。
  5. cTimer:ctimeはpythonのナノ秒精度のタイマーです。 このモジュールはc言語APIを使用して時刻を正確に記録します。 あなたは筋金入りの精密時間記録モジュールを探しているなら、これは最高のものです。 (注:pythonの最近の更新では、timeモジュールにはナノ秒単位の時間を記録する関数が追加されています)

必読:

  • 文字列を小文字に変換する方法
  • 平方根を計算する方法
  • ユーザー入力|入力()関数|キーボード入力
  • Pythonを学ぶためのベストブック

結論

主に、誰もが三つの目的のためにタイマーを使用しています。 最初のものは、コード実行の時間を記録することです。 そして、第二のものは、タイマーを使用して何かのためのリマインダーを追加するために、されています。 幸いなことに、これらの両方はPythonで作成できます。 さまざまなモジュールやライブラリを使用することで、正確な精度で時間を記録することができます。

最後に、timerはpythonのthreadingクラスのサブクラスです。 特定の時間間隔の後に関数を実行したい場合は、python timerクラスを使用できます。 デフォルトではNoneであるargsパラメータでは、コールバックメソッドに与えたい引数を指定することができます。

あなたの側でプログラムを実行してみて、何か質問があるかどうかを知らせてください。

You might also like

コメントを残す

メールアドレスが公開されることはありません。