この記事では、主にPythonタイマースレッドプールの原理の詳細な説明を紹介します。サンプルコードを詳細に紹介します。これは、すべての人の研究や仕事のための特定の参照学習値を持っています。それを必要とする友人は参照できます。
タイマーは周期的なタスクを実行します。
ナレッジリザーブ
Timer(interval, function, args=None, kwargs=None)
間隔===》時間間隔の単位はsです
関数===》カスタマイズされた実行関数
スレッドを使用したタイマークラス
start()は、実行を開始するための一般的なメソッドです
cancel()は実行をキャンセルするメソッドです
通常のシングルタイミング実行
from threading import Timer
import time
# 通常のワンショットタイマー
def handle():print("通常のワンショットタイマー機能を実行します");
t1=Timer(interval=1,function=handle);
t1.start();
時限ループ実行
from threading import Timer
import time
# サイクルタイマー
def loop_handle():print("ループタイマータイマー機能を実行します");
global t2;
t2=Timer(interval=1,function=loop_handle);
t2.start();
t2=Timer(interval=1,function=loop_handle);
t2.start();
time.sleep(5);#メインスレッドを5秒間停止します。
t2.cancel(); #t2はメインスレッドを5秒間ブロックし、t2は5秒間実行します
スレッドプールテクノロジー
基本コンセプト
プログラムが起動すると、いくつかのスレッドが作成され、メモリに保存されます。スレッドが開始されて実行されると、スレッドは破棄されませんが、次の使用を待ちます。
i:プロセスの作成と破棄の時間を節約し、プロセスのオーバーヘッドを大幅に削減します
成し遂げる
プリエンプティブ:スレッドプール内のスレッドの実行順序は固定されていません。このメソッドは、ThreadPoolExecutorのsubmit()メソッドを使用して実装されます。
スレッドの特定の実行はランダムであり、実行される関数も一貫性がない可能性があります
そのスレッドによって実行された関数がクラッシュし、スレッドプール全体の他のスレッドの動作に影響を与えません
操作を簡素化するために構文とともに使用する
非プリエンプティブ:スレッドは、呼び出された順序で実行されます。このメソッドは、ThreadPoolExecutorのmap()メソッドを使用して
各スレッドで処理される関数は同じですスレッドで実行される関数がクラッシュし、プロセス全体がクラッシュします
基本コード
from concurrent.futures import ThreadPoolExecutor #スレッドプールをインポートする
import time
def printName(name):print("ファーストネーム",name);
time.sleep(2);
nameList=['Tom','jirl','steam'];
# プリエンプティブルスレッドプール
start2=time.time();withThreadPoolExecutor(3)as executor:for i in nameList:#毎回実行される関数に一貫性がないため、パラメーターを個別に渡す必要があります
executor.submit(printName,i);
end2=time.time();print("2 speed:",str(end2-start2));
# プリエンプティブでないスレッドプール
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts