python高度なプログラミング構文--マルチタスク:スレッド(一)
マルチタスク:複数のタスクが一緒に実行されることを意味します.
マルチタスクを説明する前に、いくつかの概念を理解します.あなたのパソコンがシングルコアcpuの場合、複数のプログラムを実行する必要がある場合は、プログラムごとに0.0001秒の時間を割り当てるなど、プログラムごとに時間帯を順番に割り当てて実行します.このような順番に実行する方法は、タイムスライスローテーションと呼ばれます.パラレル:本当にマルチタスクで、cpuコア数が実行するタスクより大きい場合.同時:偽のマルチタスクで、cpuコア数が実行するタスクより小さい場合、ここではタイムスライスの回転方式が採用されます.私たちのコンピュータの多くのタスクを実行する方法でもあります.
hreadingモジュール:pythonのthreadモジュールは比較的下位のモジュールであり、pythonのthreadingモジュールはthreadをいくつか包装しており、より便利に使用することができる.threadingモジュールにはクラスTreadがあります.
一つのプログラムが実行されると、必ず実行するものがあります.これをスレッドと呼びます.
次のようになります.
一般的には、マルチスレッドを作成するには、このような実力オブジェクトを工夫して複数作成し、start()関数を呼び出す必要があります.
単一スレッド実行:
マルチスレッド実行:
現在実行中のスレッド数の表示:enumerate()
Enumerate()関数は、現在実行中のスレッド数を表示するメタグループを返します.
マルチスレッド間でグローバル変数が共有されるため、リソース競合の問題が発生し、リソース競合の問題を解決します.
反発ロック:
#反発ロックを作成します.デフォルトはロックされていないmutex=threadingです.Lock()
鍵がかかっていて、前に鍵がかかっていなければ、その時、鍵が成功した.鍵がかかっている前に鍵がかかっていると、この鍵が解けるまでここに詰まってしまう.acquire()
ロックが必要なプログラム
♪mutexをロック解除します.release()
デッドロック:オンライン・スレッド間で複数のリソースを共有する場合、2つのスレッドがそれぞれ一部のリソースを占有し、同時に相手のリソースを待つと、デッドロックが発生します.デッドロックの問題を解決するには、タイムアウト時間を設定します.
マルチタスクを説明する前に、いくつかの概念を理解します.あなたのパソコンがシングルコアcpuの場合、複数のプログラムを実行する必要がある場合は、プログラムごとに0.0001秒の時間を割り当てるなど、プログラムごとに時間帯を順番に割り当てて実行します.このような順番に実行する方法は、タイムスライスローテーションと呼ばれます.パラレル:本当にマルチタスクで、cpuコア数が実行するタスクより大きい場合.同時:偽のマルチタスクで、cpuコア数が実行するタスクより小さい場合、ここではタイムスライスの回転方式が採用されます.私たちのコンピュータの多くのタスクを実行する方法でもあります.
hreadingモジュール:pythonのthreadモジュールは比較的下位のモジュールであり、pythonのthreadingモジュールはthreadをいくつか包装しており、より便利に使用することができる.threadingモジュールにはクラスTreadがあります.
一つのプログラムが実行されると、必ず実行するものがあります.これをスレッドと呼びます.
次のようになります.
t = threading.Thread(target=saySorry) # ,
t.start() # ,
一般的には、マルチスレッドを作成するには、このような実力オブジェクトを工夫して複数作成し、start()関数を呼び出す必要があります.
単一スレッド実行:
import time
def saySorry():
print(" , , ?")
time.sleep(1)
if __name__ = "__main__":
for i in range(5):
saySorry()
マルチスレッド実行:
improt threading
import time
def saySorry():
print(" , , ?")
time.sleep(1)
if __name__ = "__main__":
for i in range(5):
t = threading.Thread(target=saySorry) # threading.Thread(target= )
t.start() # ,
現在実行中のスレッド数の表示:enumerate()
Enumerate()関数は、現在実行中のスレッド数を表示するメタグループを返します.
import threading
import time
def test1():
for i in range(5):
print("----------test1----%d------" % i)
time.sleep(1) # 1s
# Thread , ....
def test2():
for i in range(10):
print("-----------test2---%d-----" % i)
time.sleep(1)
def main():
t1 = threading.Thread(target=test1) #
t2 = threading.Thread(target=test2)
def test2():
for i in range(10):
print("-----------test2---%d-----" % i)
time.sleep(1)
def main():
t1 = threading.Thread(target=test1) #
t2 = threading.Thread(target=test2)
t1.start() #
t2.start()
while True:
print(threading.enumerate()) #
if len(threading.enumerate())<=1: # 1, 1
break
time.sleep(1)
if __name__ == "__main__":
main()
マルチスレッド間でグローバル変数が共有されるため、リソース競合の問題が発生し、リソース競合の問題を解決します.
反発ロック:
#反発ロックを作成します.デフォルトはロックされていないmutex=threadingです.Lock()
鍵がかかっていて、前に鍵がかかっていなければ、その時、鍵が成功した.鍵がかかっている前に鍵がかかっていると、この鍵が解けるまでここに詰まってしまう.acquire()
ロックが必要なプログラム
♪mutexをロック解除します.release()
デッドロック:オンライン・スレッド間で複数のリソースを共有する場合、2つのスレッドがそれぞれ一部のリソースを占有し、同時に相手のリソースを待つと、デッドロックが発生します.デッドロックの問題を解決するには、タイムアウト時間を設定します.