JOINスレッド
Threadクラスは、別のスレッドの実行が完了するのをスレッドに待機させるために使用されるjoin()関数を提供します。プログラムの実行中にスレッドAがスレッドBのjoin()関数を呼び出すと、スレッドAはスレッドBまでブロックされます実行が完了しました。
このメソッドの設計は主に、大きな問題をいくつかの小さな問題に分割し、それぞれの小さな問題にスレッドを割り当てるために使用されます。小さな問題がすべて解決されると、メインスレッドが呼び出されてさらに操作されます
import threading
# 定义action函数准备作为线程执行体使用
def action(max):
for i in range(max):
print(threading.current_thread().name + " " + str(i))
# 启动子线程
threading.Thread(target=action, args=(100,), name="新线程").start()
for i in range(100):
if i == 20:
jt = threading.Thread(target=action, args=(100,), name="被Join的线程")
jt.start()
# 主线程调用了jt线程的join()方法,主线程
# 必须等jt执行结束才会向下执行
jt.join()
print(threading.current_thread().name + " " + str(i))
- このプログラムには実際には合計3つのスレッドがあり、メインスレッドに加えて、「新しいスレッド」という名前のスレッドが定義され、次に「スレッド結合」という名前のスレッドが定義されます。
- プログラムを起動すると、メインスレッドと並行して「新しいスレッド」が実行されます
- メインスレッドのループ変数i = 20が「スレッド結合」を開始すると、メインスレッドがjoin()関数を呼び出すため、スレッドはメインスレッドと並行して実行されず、メインスレッドは待機してブロック状態になります。
- 「
結合されたスレッド」が実行されるまで、メインスレッドはjoin()関数を実行し続けます。タイムアウトパラメータを指定できます。つまり、結合されたスレッドがタイムアウト時間内に終了しなかった場合、単位は秒です。待ってて
バックグラウンドスレッド
バックグラウンドスレッドはデーモンスレッドとも呼ばれ、主に他のスレッドにサービスを提供するために使用されます。バックグラウンドスレッドには、すべてのフォアグラウンドスレッドが終了するとバックグラウンドスレッドが自動的に終了するという機能があります。
import threading
# 定义后台线程的线程执行体与普通线程没有任何区别
def action(max):
for i in range(max):
print(threading.current_thread().name + " " + str(i))
t = threading.Thread(target=action, args=(100,), name='后台线程')
# 将此线程设置成后台线程
# 也可在创建Thread对象时通过daemon参数将其设为后台线程
t.daemon = True
# 启动后台线程
t.start()
for i in range(10):
print(threading.current_thread().name + " " + str(i))
# -----程序执行到此处,前台线程(主线程)结束------
# 后台线程也应该随之结束
- バックグラウンドスレッドを作成するには2つの方法があります。1つはスレッドのデーモン属性をTrueに設定する方法、もう1つはデフォルトでバックグラウンドスレッドによって作成された子スレッドがバックグラウンドスレッドであり、フォアグラウンドスレッドによって作成された子スレッドがフォアグラウンドスレッドでもある方法です。
- バックグラウンドスレッドを設定します。スレッドを開始する前に設定する必要があります。設定しないと、RuntimeErrorが報告されます。
スレッドスリープ
import time
for i in range(10):
print("当前时间: %s" % time.ctime())
# 调用sleep()函数让当前线程暂停1s
time.sleep(1)