1. 程式人生 > >python並行並發

python並行並發

這樣的 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並行並發