python使用多執行緒例項講解

2021-08-03 10:21:43 字數 3455 閱讀 7113

說起多執行緒,你需要知道多程序和多執行緒的區別,了解多執行緒的概念,至於這兩點,我不打算在本片文章中詳述了,不錯,因為我懶得整理。。。不了解的請先問度娘

打個比方,我想做聽**和敲**兩件事兒,那麼如果大腦簡單的話一定要先排一下順序

# coding=utf-8

from time import ctime,sleep

def music():

for i in range(2):

print "i was listening to music . %s" %ctime()

sleep(1)

def coding():

for i in range(2):

print "i was coding codes! %s" %ctime()

sleep(5)

if __name__ =='__main__':

music()

coding()

print " all over %s" %ctime()

執行結果:

那麼我想告訴你們我聽的什麼歌、敲了什麼**。下面我將**進行乙個優化,用引數來控制歌曲和**

# coding=utf-8

from time import ctime,sleep

def music(name):

for i in range(2):

print "i was listening to music . %s %s" %(name,ctime())

sleep(1)

def coding(code):

for i in range(2):

print "i was coding codes! %s %s" %(code,ctime())

sleep(5)

if __name__ =='__main__':

music(u'偉大的闖爺')

coding(u'python**')

print " all over %s" %ctime()

結果:

vagrant@homestead:~/release/python$ python xiancheng.py

i was listening to music . 偉大的闖爺 wed jul 5 03:30:05 2017

i was listening to music . 偉大的闖爺 wed jul 5 03:30:06 2017

i was coding codes! python** wed jul 5 03:30:07 2017

i was coding codes! python** wed jul 5 03:30:12 2017

all over wed jul 5 03:30:17 2017

i was listening to music . 偉大的闖爺之歌 wed jul  5 03:53:03 2017

all over wed jul 5 03:53:03 2017

從執行結果來看,子執行緒(muisc 、coding)和主線程(print "all over %s" %ctime())都是同一時間啟動,但由於主線程執行完結束,所以導致子執行緒也終止。繼續調整程式:

...

if __name__ =='__main__':

for t in threads:

#setdaemon(true)將執行緒宣告為守護執行緒,必須在start() 方法呼叫之前設定,如果不設定為守護執行緒程式會被無限掛起。

#子執行緒啟動後,父執行緒也繼續執行下去,

#當父執行緒執行完最後一條語句print "all over %s" %ctime()後,沒有等待子執行緒,直接就退出了,同時子執行緒也一同結束。

t.setdaemon(true);

#開始執行緒活動

t.start()

t.join()

print " all over %s" %ctime()

我們只對上面的程式加了個join()方法,用於等待執行緒終止。join()的作用是,在子執行緒完成執行之前,這個子執行緒的父執行緒將一直被阻塞。

注意:  join()方法的位置是在for迴圈外的,也就是說必須等待for迴圈裡的兩個程序都結束後,才去執行主程序。

執行結果:

i was listening to music . 偉大的闖爺之歌 wed jul  5 03:59:22 2017

i was coding codes! python** wed jul 5 03:59:22 2017

i was listening to music . 偉大的闖爺之歌 wed jul 5 03:59:23 2017

i was coding codes! python** wed jul 5 03:59:27 2017

all over wed jul 5 03:59:32 2017

可以看到一共消耗的時間為10s完成 ,取決於消耗時間最大的執行緒在來一次,將**的時間調整為sleep 4秒 執行結果:

i was listening to music . 偉大的闖爺之歌 wed jul  5 04:09:05 2017

i was coding codes! python** wed jul 5 04:09:05 2017

i was listening to music . 偉大的闖爺之歌 wed jul 5 04:09:09 2017

i was coding codes! python** wed jul 5 04:09:10 2017

all over wed jul 5 04:09:15 2017

消耗的時間仍然為10s

例項講解spring boot 多執行緒

spring 通過任務執行器 taskexecutor 來實現多mdkwixfpo執行緒和併發程式設計。使用threadpooltaskexecutor可實現乙個基於執行緒池的taskexecutor。而實際開發中任務一般是非阻塞的,即非同步的,所有我們在配置類中通過 enableasync開啟對非...

C C C 多執行緒入門例項講解

題目 三個執行緒,兩個執行緒分別生成乙個隨機數,第三個執行緒計算和。思路 熟悉c 多執行緒的用法以及互斥鎖的使用,此例好像不用加鎖。設定微秒級別的隨機數種子。不然產生的兩個隨機數一樣。include include include include include using namespace st...

python多執行緒例項

a 建立乙個thread的例項,傳給他乙個函式 import threading from time import sleep def thread body arg1,arg2 print i am a child thread arg1,arg2 sleep 10 print end child...