單執行緒:
from time import ctime,sleep
def music(func):
for i in range(2):
print "i was listening to %s. %s" %(func,ctime())
sleep(1)
def move(func):
for i in range(2):
print "i was at the %s! %s" %(func,ctime())
sleep(5)
if __name__ == '__main__':
music(u'愛情買賣')#對music()和move()進行了傳參處理
move(u'阿凡達')
print "all over %s" %ctime()
執行結果:
>>> ********************==== restart ******************************==
>>>
i was listening to 愛情買賣. thu apr 17 11:48:59 2014
i was listening to 愛情買賣. thu apr 17 11:49:00 2014
i was at the 阿凡達! thu apr 17 11:49:01 2014
i was at the 阿凡達! thu apr 17 11:49:06 2014
all over thu apr 17 11:49:11 2014
多執行緒:
#coding=utf-8
import threading
from time import ctime,sleep
def music(func):
for i in range(2):
print "i was listening to %s. %s" %(func,ctime())
sleep(1)
def move(func):
for i in range(2):
print "i was at the %s! %s" %(func,ctime())
sleep(5)
threads =
t1 =threading.thread(target=music,args=(u'愛情買賣',))
t.start()
t.start()
最後通過for迴圈遍歷陣列。(陣列被裝載了t1和t2兩個執行緒)
setdaemon()
setdaemon(true)將執行緒宣告為守護執行緒,必須在start() 方法呼叫之前設定,如果不設定為守護執行緒程式會被無限掛起。子執行緒啟動後,父執行緒也繼續執行下去,當父執行緒執行完最後一條語句print "all over %s" %ctime()後,沒有等待子執行緒,直接就退出了,同時子執行緒也一同結束。
start() #始執行緒活動。
執行結果:
>>> ************************* restart ******************************==
>>>
i was listening to 愛情買賣. thu apr 17 12:51:45 2014 i was at the 阿凡達! thu apr 17 12:51:45 2014 all over thu apr 17 12:51:45 2014
從執行結果來看,
子執行緒(muisc 、move )和主線程(print "all over %s" %ctime())都是同一時間啟動,但由於主線程執行完結束,所以導致子執行緒也終止。
優化程式
...if __name__ == '__main__':
for t in threads:
t.setdaemon(true)
t.start()
t.join()
print "all over %s" %ctime()
我們只對上面的程式加了個join()方法,用於等待執行緒終止。
join()的作用是,在子執行緒完成執行之前,這個子執行緒的父執行緒將一直被阻塞。
注意: join()方法的位置是在for迴圈外的,也就是說必須等待for迴圈裡的兩個程序都結束後,才去執行主程序。
執行結果:
>>> ************************* restart ******************************==
>>>
i was listening to 愛情買賣. thu apr 17 13:04:11 2014 i was at the 阿凡達! thu apr 17 13:04:11 2014
i was listening to 愛情買賣. thu apr 17 13:04:12 2014
i was at the 阿凡達! thu apr 17 13:04:16 2014
all over thu apr 17 13:04:21 2014
#coding=utf-8
from time import sleep, ctime
import threading
def muisc(func):
for i in range(2):
print 'start playing: %s! %s' %(func,ctime())
sleep(2)
def move(func):
for i in range(2):
print 'start playing: %s! %s' %(func,ctime())
sleep(5)
def player(name):
r = name.split('.')[1]
if r == '***':
muisc(name)
else:
if r == 'mp4':
move(name)
else:
print 'error: the format is not recognized!'
list = ['愛情買賣.***','阿凡達.mp4']
threads =
files = range(len(list))
#建立執行緒
for i in files:
t =threading.thread(target=player,args=(list[i],))
for i in files:
threads[i].join()
t =threading.thread(target=super_player,args=(file,time))
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
python多執行緒詳解 Python多執行緒詳解
前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...
python程式多執行緒 PYTHON多執行緒
在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...