python高度なプログラミング構文--マルチタスク:スレッド(一)


マルチタスク:複数のタスクが一緒に実行されることを意味します.
マルチタスクを説明する前に、いくつかの概念を理解します.あなたのパソコンがシングルコア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つのスレッドがそれぞれ一部のリソースを占有し、同時に相手のリソースを待つと、デッドロックが発生します.デッドロックの問題を解決するには、タイムアウト時間を設定します.