python3之-----多線程

********************** ?創(chuàng)建一個播放器的線程 ?**********************

from timeimport sleep,ctime

import threading

#創(chuàng)建聽音樂任務

def music(func):

for iin range(2):

print("我正在聽:%s! %s"%(func,ctime()))

sleep(2)

#創(chuàng)建看電影任務

def move(func):

for i in range(2):

print("我正在查看:%s! %s"%(func,ctime()))

sleep(5)

#判斷文件類型贮聂,交給相應的函數執(zhí)行

def palyer(name):

r = name.split(".")[1]

if r =="mp3":

music(name)

elif r =="mp4":

move(name)

else:

print("格式錯誤荠瘪,無法播放!")

list = ["大中國.mp3","戰(zhàn)狼2.mp4"]

#創(chuàng)建線程列表

threads = []

#創(chuàng)建線程t1,并添加到線程列表

t1 = threading.Thread(target=music,args=("大中國",))

threads.append(t1)

#創(chuàng)建線程t2,并添加到線程列表

t2 = threading.Thread(target=move,args=("戰(zhàn)狼2",))

threads.append(t2)

if __name__ =="__main__":

#啟動線程

? ? for iin threads:

i.start()

#守護線程

? ? for iin threads:

i.join()

#主線程

print("all end:",ctime())


************************ ?線程的優(yōu)化 ?**************************************

從上面例子中發(fā)現線程的創(chuàng)建是頗為麻煩的无拗,每創(chuàng)建一個線程都需要創(chuàng)建一個t(t1、t2、...)侧蘸,如

果創(chuàng)建的線程較多時這樣極其不方便钦幔。下面對通過例子進行改進:

import threading

from timeimport sleep,ctime

#播放音樂

def music(func):

for iin range(0,2):

print("我正在聽:",func,ctime())

sleep(2)

#播放視頻

def move(func):

for iin range(0,2):

print("我正在看:",func,ctime())

sleep(5)

#播放器

def player(file):

hz = file.split(".")[1]

if hz =="mp3":

music(file)

elif hz =="mp4":

move(file)

else:

print("文件格式錯誤!")

#定義播放列表

lst = ["大中國.mp3","戰(zhàn)狼2.mp4"]

#創(chuàng)建空線程

threads = []

#創(chuàng)建線程

for filein lst:

threads.append(threading.Thread(target=player,args=(file,)))

#啟動線程

for iin threads:

i.start()

#創(chuàng)建守護線程

for iin threads:

i.join()

print("主線程結束")

注釋:

? ? 我們創(chuàng)建了一個player()函數杨耙,這個函數用于判斷播放文件的類型。如果是mp3 格式的飘痛,我們將調用music()函數珊膜,如果是mp4格式的我們調用move()函數。哪果兩種格式都不是那么只能告訴用戶你所提供有文件我播放不了宣脉。

?? ?之后车柠,我們創(chuàng)建了一個lst 的文件列表,注意為播放的文件要加上后綴名塑猖。然后我們用file 來遍歷文件列表中的所有內容竹祷。

? ? 接著我們通過一個for 循環(huán),把list 中的文件添加到線程中數組threads[]中羊苟。接著啟動threads[]線程組塑陵,最后打印結束時間。

************************************* ?繼續(xù)改進 ?*********************************

通過上面的程序蜡励,我們發(fā)現player()用于判斷文件擴展名令花,然后調用music()和move() 。有沒有辦法創(chuàng)建一臺超級播放器凉倚,什么文件都可以播放呢兼都?答案是肯定的,接下來稽寒,我們繼續(xù)改進:

from timeimport sleep,ctime

import threading

import time

#創(chuàng)建超級播放器

def super_player(func,time):

for iin range(0,2):

print("正在播放%s %s"%(func,ctime()))

sleep(time)

#定義播放列表

dict1 = {"中華民謠.mp3":3,"大中國.mp3":4,"戰(zhàn)狼2.mp4":2}

#定義線程列表

threads = []

#創(chuàng)建播放線程

for file,timein dict1.items():

t = threading.Thread(target=super_player,args=(file,time))

threads.append(t)

if __name__ =="__main__":

#啟動線程,同時啟動守護線程

? ? for iin threads:

i.start()

for iin threads:

i.join()

#主線程

? ? print("主線程結束 %s"%ctime())

注釋:

首先創(chuàng)建字典list 俯抖,用于定義要播放的文件及時長(秒),通過字典的items()方法來循環(huán)的取file和time瓦胎,取到的這兩個值用于創(chuàng)建線程芬萍。接著創(chuàng)建super_player()函數,用于接收file 和time搔啊,用于確定要播放的文件及時長柬祠。

********************************** ?用線程類的方法完成上面的編程 ?***********************

import threading

from timeimport sleep,ctime

class MyThread(threading.Thread):

def __init__(self,file,time):

#固定寫法,必須顯示調用父類的構造函數

threading.Thread.__init__(self)

self.file=file

self.time=time

#run()函數负芋,是固定的寫法漫蛔,表示運行線程的內容

? ? def run(self):

super_play(self.file,self.time)

#被線程調用來執(zhí)行的方法

def super_play(file,time):

for iin range(2):

print('正在播放: %s! %s' %(file,ctime()))

sleep(time)

#定義播放列表

lst = {"中華民謠.mp3":3,"大中國.mp3":4,"戰(zhàn)狼2.mp4":2}

#創(chuàng)建線程

threads = []

#創(chuàng)建播放器線程

for file,timein lst.items():

t = MyThread(file,time)

threads.append(t)

if __name__ =='__main__':

#啟動線程

? ? for iin threads:

i.start()

#創(chuàng)建守護線程

? ? for iin threads:

i.join()

#主線程

? ? print('主線程結束:%s' %ctime())

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末嗜愈,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子莽龟,更是在濱河造成了極大的恐慌蠕嫁,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毯盈,死亡現場離奇詭異剃毒,居然都是意外死亡,警方通過查閱死者的電腦和手機搂赋,發(fā)現死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門赘阀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脑奠,你說我怎么就攤上這事基公。” “怎么了宋欺?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵轰豆,是天一觀的道長。 經常有香客問我齿诞,道長酸休,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任掌挚,我火速辦了婚禮雨席,結果婚禮上菩咨,老公的妹妹穿的比我還像新娘吠式。我一直安慰自己,他們只是感情好抽米,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布特占。 她就那樣靜靜地躺著,像睡著了一般云茸。 火紅的嫁衣襯著肌膚如雪是目。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天标捺,我揣著相機與錄音懊纳,去河邊找鬼。 笑死亡容,一個胖子當著我的面吹牛嗤疯,可吹牛的內容都是我干的。 我是一名探鬼主播闺兢,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼茂缚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起脚囊,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤龟糕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后悔耘,有當地人在樹林里發(fā)現了一具尸體讲岁,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年淮逊,在試婚紗的時候發(fā)現自己被綠了催首。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡泄鹏,死狀恐怖郎任,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情备籽,我是刑警寧澤舶治,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站车猬,受9級特大地震影響霉猛,放射性物質發(fā)生泄漏。R本人自食惡果不足惜珠闰,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一惜浅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伏嗜,春花似錦坛悉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至军熏,卻和暖如春轩猩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荡澎。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工均践, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人摩幔。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓彤委,卻偏偏與公主長得像,于是被迫代替她去往敵國和親热鞍。 傳聞我的和親對象是個殘疾皇子葫慎,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容

  • 一文讀懂Python多線程 1衔彻、線程和進程 計算機的核心是CPU,它承擔了所有的計算任務偷办。它就像一座工廠艰额,時刻在運...
    星丶雲閱讀 1,455評論 0 4
  • 寫在前面的話 代碼中的# > 表示的是輸出結果 輸入 使用input()函數 用法 注意input函數輸出的均是字...
    FlyingLittlePG閱讀 2,771評論 0 8
  • 前言 單線程和多線程是什么自行google補腦 對于python 單線程和多線程的理解柄沮,我花了很長時間,搜索的大部...
    keitwo閱讀 932評論 0 0
  • 線程 引言&動機 考慮一下這個場景废岂,我們有10000條數據需要處理祖搓,處理每條數據需要花費1秒,但讀取數據只需要0....
    不浪漫的浪漫_ea03閱讀 364評論 0 0
  • 多線程模塊 threading 創(chuàng)建多線程的兩種方式:import threadingimport time 創(chuàng)建...
    錢塘閱讀 392評論 0 3