python 多線程 及多線程通訊

來源:互聯網
上載者:User

標籤:必須   第一個   方法   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 多線程 及多線程通訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.