標籤:必須 第一個 方法 put tar als art bre 結束
1、簡單的多線程例子
import threading,time
def b_fun(i):
print "____________b_fun start"
time.sleep(7)
print "________________b_fun end"
def a_fun():
print "__________a_fun start"
t = threading.Thread(target=b_fun, args=(1,))
# t.setDaemon(True) #setDaemon()設定為False和沒有這句話一個意思,設定為True,就是主線程a_fun函數不登t這個子線程了,a運行完,不管t運行完沒有,a和t都結束,且setDaemon必須放在start()前面
t.start()
print "__________1",
# t.join(3) #join()小括弧中設定3的意思是,主線程a_fun函數運行到這的時候,等子線程t 3秒鐘,三秒鐘後不管子線程t結束沒,a都繼續運行下去,執行到return,主線程結束時子線程還可以繼續在運行,直到結束
# 如果join小括弧中沒有設定,就代表,主線程在這個地方一直等著子線程結束後,主線程才繼續執行下去
#如果這個地方沒有join()這個方法,就代表,主線程不等子線程,主線程直接運行下去
print "__________a結束"
return "傳回值"
cc=a_fun()
print cc
2、帶通訊的多線程
這種情況主要是,當一個多線程,開了幾個子線程,想知道幾個子線程的執行情況的時候用到
#帶通訊的多線程 Queue(隊列,先進先出)
import threading,Queue,time
q=Queue.Queue()
def c1(a1):
time.sleep(7)
print a1
q.put("c1 put 的內容")#put 存入到隊列中
def c2(a1):
time.sleep(4)
print a1
q.put("c2 put 的內容")# put 存入到隊列中
def a1():
print "a1開始_______"
cs1="第一個子線程cs1"
t1=threading.Thread(target=c1,args=(cs1,))
t1.start()
cs2="第二個子線程cs2"
t2=threading.Thread(target=c2,args=(cs2,))
t2.start()
qq=q.get() #擷取隊列中的內容,並刪除
if qq: #如果隊列中有內容,說明兩個隊列已經執行一個了
print qq
a1()
如果在a1中想判斷 兩個線程是否都執行完了,可以用
while True:
if q.qsize()==2:
print q.qsize()
print q.get()
break
python 多線程 及多線程通訊