python多執行緒

2021-09-02 01:14:19 字數 3576 閱讀 7105

單執行緒:

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分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...