ホームページ  >  記事  >  バックエンド開発  >  Pythonでのマルチスレッドの作成と基本的な呼び出し方法

Pythonでのマルチスレッドの作成と基本的な呼び出し方法

WBOY
WBOYオリジナル
2016-07-22 08:56:241052ブラウズ

1. マルチスレッドの役割
つまり、マルチスレッドとは独立したサブタスクを並列処理することであり、それによってタスク全体の効率が大幅に向上します。

2. Python のマルチスレッド関連のモジュールとメソッド
Python は、スレッド、スレッド化、キューなどを含む、マルチスレッド プログラミング用のいくつかのモジュールを提供します。 スレッド モジュールは、基本的なスレッドとロックのサポートを提供するだけでなく、次のような基本的な同期データ構造のロック オブジェクトも提供します。 start_new_thread(function, args kwargs=None) は、指定された関数を実行するための新しいスレッドを生成します
assign_lock() はタイプ LockType のロック オブジェクトを割り当てます
exit() によりスレッドが終了します
acquire(wait=None) はロックオブジェクトの取得を試みます
locked() は、ロック オブジェクトが取得された場合は TRUE を返し、それ以外の場合は FALSE を返します
release() はロックを解放します
スレッド化により、より高レベルで強力なスレッド管理機能が提供されます
Thread クラスはスレッドの実行オブジェクトを表します
ロックロックプリミティブオブジェクト
RLock は再入可能なロック オブジェクトであり、単一のスレッドが取得したロックを再度取得できるようにします
キュー モジュールを使用すると、ユーザーは複数のスレッド間でデータを共有するために使用できるキュー データ構造を作成できます
スレッド間でデータを共有するためのプロセス間通信に使用できます
モジュール関数 queue(size) はサイズ size の Queue オブジェクトを作成します
キューオブジェクト関数 qsize() はキューサイズを返します
empty() は、キューが空の場合は True を返し、それ以外の場合は False を返します
put(item, block=0) ITEM をキューに入れます。 block が 0 でない場合、関数はキューに入るまでブロックされます
get(block=0) はキューからオブジェクトを取得します。 block が指定された場合、関数はキューにオブジェクトが存在するまでブロックされます

3.例

現在、Python のライブラリには、マルチスレッド プログラミング用に 2 つの起動メソッドが用意されています。1 つはスレッド モジュールの比較的基本的な start_new_thread メソッドで、もう 1 つは統合スレッド モジュールのスレッド オブジェクト Thread クラスを使用します。 。
現在使用されているのは、古いバージョンのスレッドモジュールで start_new_thread() 関数を呼び出して新しいスレッドを生成することです
比較すると、thread.start_new_thread(function,(args[,kwargs])) の実装メカニズムは実際には C に似ており、関数パラメーターは呼び出されるスレッド関数 (args[,kwargs]) はスレッドです。呼び出される関数。スレッド関数のパラメータのタプル タイプを作成します。ここで、kwargs はオプションのパラメータです。新しく作成されたスレッドは通常、スレッド関数の実行が終了すると自動的に終了するか、スレッド関数内で thread.exit() を呼び出して SystemExit 例外をスローしてスレッド終了の目的を達成します。

リーリー

このメソッドを使用してスレッドを開始すると、例外が発生する可能性があります


リーリー

解決策: スレッドを開始した後、メインスレッドがすべてのサブスレッドが結果を返すのを待ってから終了するようにしてください。メインスレッドがサブスレッドよりも早く終了した場合、サブスレッドがバックグラウンドスレッドであるかどうかに関係なく、メインスレッドは終了します。中断され、この例外がスローされます ブロッキング待機に対する応答がない場合、メインスレッドが早期に終了するのを防ぐために、time.sleep を呼び出してメインスレッドを十分な時間スリープさせる必要があります。また、ロック機構を使用して、メインスレッドをスリープさせることもできます。同様の状況を回避するには、スレッドを開始するときに、スレッドが実行されるまで各スレッドにロックを追加し、その後ロックを解放します。同時に、Python のメイン スレッドで while ループが使用され、各スレッド ロックが解放されたかどうかを継続的に判断します。


リーリー

多くの紹介では、Python の新しいバージョンでは Threading モジュールが推奨されていると記載されていますが、まだ適用されていません。 。 。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。