python並行並發
阿新 • • 發佈:2018-02-02
這樣的 ping 開始 time 想要 step () ... 介紹
並發
當我們執行.py從開始到結束只有一個流程的時候,這種是單線程程序,有時候設計程序時會想要針對不同的需求擁有多個流程,也就是所謂的多線程(Multi-thread)程序,這樣的程序在執行的時候看起來像是並發
線程介紹
如果要設計一個龜兔賽跑遊戲,賽程長度為10步,每經過1秒,烏龜會前進一部,兔子可能前進兩步或睡覺,如果使用單線程可能會如下設計:
import random flags = [True, False] total_step = 10 tortoise_step = 0 hare_step = 0 print("龜兔賽跑開始...") while tortoise_step < total_step and hare_step < total_step: tortoise_step += 1 print(‘烏龜跑了 {} 步...‘.format(tortoise_step)) sleeping = flags[int(random.random() * 10) % 2] if sleeping: print(‘兔子睡著了zzzzz‘) else: hare_step += 2 print(‘兔子跑了 {} 步...‘.format(hare_step))
由於程序只有一個流程,因此只能將烏龜與兔子的行為混雜在這個流程中編寫。為什麽每次都先遞增烏龜再遞增兔子步數呢?這樣對兔子很不公平啊!如果可以編寫程序啟動兩個線程,一個是烏龜線程,一個是兔子線程,程序邏輯就會比較清楚。
在Python中,如果想在主線程以外獨立設計線程,可以使用threading模塊,例如可以在兩個獨立的函數中分別設計烏龜與兔子的線程。
import random, threading, time def tortoise(total_step): step = 0 while step < total_step: step += 1 print(‘烏龜跑了 {} 步...‘.format(step)) time.sleep(1) #為了方便直觀看到效果 def hare(total_step): step = 0 flags = [True, False] while step < total_step: sleeping = flags[int(random.random() * 10) % 2] if sleeping: print(‘兔子睡著了zzzz‘) time.sleep(1) else: step += 2 print(‘兔子跑了 {} 步...‘.format(step)) time.sleep(1) t = threading.Thread(target=tortoise, args=(10,)) h = threading.Thread(target=hare, args=(10,)) t.start() h.start()
python並行並發