他の丘からストーンズは、------「歌小鴨ヘミングのブック」を学ぶことができます
マルチスレッドのpythonを使用します
I.はじめに
何であるかのスレッド上の誰もが、プロセスどのような場合には、まだ疑問を持って、これはこれらの概念のもはや重複した説明でGoogle検索してください、この論文の目的は、いくつかの方法でのpythonのマルチスレッドを要約します。
二つのモジュール内のpython3共通のスレッド:
- _糸
- スレッド(推奨)
スレッドモジュールが放棄されています。ユーザーはモジュールをスレッドの代わりに使用することができます。だから、あなたは、もはやでのpython3で「スレッド」モジュールを使用することはできません。互換性のために、のpython3スレッド名の変更「_thread」。
ここでは、実際の例を使用して複数のスレッドを実装するための3つの方法があります。
二、Pythonのマルチスレッド
1. _threadマルチスレッド
機能またはThreadオブジェクトのクラスをラップする:Pythonのスレッドは、2つの方法で使用されます。
機能:コール_threadモジュールstart_new_thread()関数は、新しいスレッドを生成します。構文は次のとおりです。
_thread.start_new_thread ( function, args[, kwargs] )
パラメータ:
- 機能 - スレッド機能。
- 引数 - スレッド関数に渡される引数は、彼はタプル型でなければなりません。
- kwargsから - オプション。
注:任意のコントロールせずに終了したときのために_threadプロセス。ときにメインスレッド、他のすべてのスレッドも強制的に終了しています。これは、警告または適切なクリーンアップを発行しません。したがって、一般的に完全なスレッド制御機構とセマフォのメカニズムを提供する、より高度なスレッド・モジュールを使用するマルチスレッドのPython。
ケース:
# -*- coding: utf-8 -*-
import _thread
import time
def print_time(thread_name, sleep_time):
for i in range(5):
time.sleep(sleep_time)
print("threadName: %s, time is %s" % (thread_name, time.ctime(time.time())))
if __name__ == "__main__":
try:
_thread.start_new_thread(print_time, ("thread-1", 2))
_thread.start_new_thread(print_time, ("thread-2", 2))
except:
print("线程为启动")
while 1:
pass
2.作成threading.Threadを通じて、マルチスレッド
python3.xモジュールを通すことによって、新しいスレッドを作成し、2つの方法があります一つはthreading.Thread(TARGET =実行方法)によるものである - すなわち、スレッドオブジェクト(またはオブジェクト)の実行メソッドに渡されます。
# -*- coding: utf-8 -*-
import time
import threading
def print_time():
for i in range(5):
time.sleep(1)
print("threadName: %s, time is %s" % (threading.current_thread().getName(),
time.ctime(time.time())))
if __name__ == "__main__":
t = threading.Thread(target=print_time)
t2 = threading.Thread(target=print_time)
t.start()
t2.start()
t.join() # join是阻塞当前线程(此处的当前线程时主线程) 主线程直到Thread-1结束之后才结束
print("主线程打印内容")
3.サブクラスを定義継承threading.Thread介してマルチスレッド作成します
私たちは、直接threading.Threadから新しいサブクラスを継承して作成することができ、通話開始インスタンス化()メソッドの後に、それは、スレッドのrun()メソッドを呼び出し、新しいスレッドを開始するには:
# -*- coding: utf-8 -*-
import threading
import time
exitFlag = 0
class myThread(threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
print("开始线程:" + self.name)
print_time(self.name, self.counter, 5)
print("退出线程:" + self.name)
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
threadName.exit()
time.sleep(delay)
print("%s: %s" % (threadName, time.ctime(time.time())))
counter -= 1
if __name__ == "__main__":
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print("退出主线程")