多線程

多線程類似于同時(shí)執(zhí)行多個(gè)不同程序蹲坷,多線程運(yùn)行有如下優(yōu)點(diǎn):

  1. 使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理。
  2. 用戶界面可以更加吸引人级乐,比如用戶點(diǎn)擊了一個(gè)按鈕去觸發(fā)某些事件的處理风科,可以彈出一個(gè)進(jìn)度條來顯示處理的進(jìn)度
  3. 程序的運(yùn)行速度可能加快
  4. 在一些等待的任務(wù)實(shí)現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等题山,線程就比較有用了故痊。在這種情況下我們可以釋放一些珍貴的資源如內(nèi)存占用等等。
  5. 線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的慨菱。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口抡柿、順序執(zhí)行序列和程序的出口等恐。但是線程不能夠獨(dú)立執(zhí)行课蔬,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制战惊。

應(yīng)用

Python3 線程中常用的兩個(gè)模塊為:

  1. _thread
  2. threading(推薦使用)
    ??thread 模塊已被廢棄吞获。用戶可以使用 threading 模塊代替谚鄙。所以,在 Python3 中不能再使用"thread" 模塊烤黍。為了兼容性傻盟,Python3 將 thread 重命名為 "_thread"。

Python中使用線程有兩種方式:函數(shù)或者用類來包裝線程對(duì)象规哲。

函數(shù)式:調(diào)用 _thread 模塊中的start_new_thread()函數(shù)來產(chǎn)生新線程媳叨。語法如下:

_thread.start_new_thread ( function, args[, kwargs] )
參數(shù)說明:

  1. function - 線程函數(shù)。
  2. args - 傳遞給線程函數(shù)的參數(shù),他必須是個(gè)tuple類型糊秆。
  3. kwargs - 可選參數(shù)痘番。
#!/usr/bin/python3

import _thread
import time

# 為線程定義一個(gè)函數(shù)
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print ("%s: %s" % ( threadName, time.ctime(time.time()) ))

# 創(chuàng)建兩個(gè)線程
try:
   _thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   _thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print ("Error: 無法啟動(dòng)線程")

while 1:
   pass

#輸出
Thread-1: Wed Apr  6 11:36:31 2016
Thread-1: Wed Apr  6 11:36:33 2016
Thread-2: Wed Apr  6 11:36:33 2016
Thread-1: Wed Apr  6 11:36:35 2016
Thread-1: Wed Apr  6 11:36:37 2016
Thread-2: Wed Apr  6 11:36:37 2016
Thread-1: Wed Apr  6 11:36:39 2016
Thread-2: Wed Apr  6 11:36:41 2016
Thread-2: Wed Apr  6 11:36:45 2016
Thread-2: Wed Apr  6 11:36:49 2016

案例

簡(jiǎn)單的應(yīng)用了解了我們實(shí)際練習(xí)一下簡(jiǎn)單案例

  1. 用多線程構(gòu)造新的列表汞舱,將每個(gè)元素做平方計(jì)算

注意:

  • 線程設(shè)置中的put和get的作用和用法
  • 參數(shù)設(shè)置方法
  • 線程列表添加
import threading
import time
from queue import Queue


def job(l, q):
    for i in range(len(l)):
        l[i] = l[i]**2
    q.put(l) #將數(shù)據(jù)推送到隊(duì)列昂芜,多線程不支持返回值


def main():

    q = Queue()
    threads = []
    results = []
    data = [[1, 2, 3], [3, 4, 5], [4, 4, 4], [5, 5, 5]]
    for i in range(4):
        t = threading.Thread(target=job, args=(data[i], q)) #創(chuàng)建線程泌神,可用args傳入?yún)?shù)舞虱,記得傳入隊(duì)列
        t.start()
        threads.append(t)   #將每個(gè)線程加入到線程列表
    for thread in threads:
        thread.join()   #將線程加入到主線程

    for _ in range(4):
        results.append(q.get()) #獲取隊(duì)列里面的列表數(shù)據(jù)
    print(results)

if __name__ == '__main__':
    main()
  1. 計(jì)算列表元素sum值,為了體現(xiàn)多線程的速度優(yōu)勢(shì)损趋,我們?cè)O(shè)置time函數(shù)展示
import  threading
from queue import Queue
import time
import copy


def job(l, q):
    res = sum(l)
    q.put(res)


def multithreading(l):
    q = Queue()
    threads = []
    for i in range(4):
        t = threading.Thread(target=job, args=(copy.copy(l), q), name='T%i' %i)
        t.start()
        threads.append(t)

    for thread in threads:
        t.join()
    total = 0
    for _ in range(4):
        total += q.get()
    print(total)

def normal(l):
    total = sum(l)
    print(total)

if __name__ == '__main__':
    l = list(range(1000000))
    s_t = time.time()
    normal(l*4)
    print('normal: ', time.time() - s_t)
    s_t = time.time()
    multithreading(l)
    print('multithreading: ', time.time() - s_t)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浑槽,一起剝皮案震驚了整個(gè)濱河市桐玻,隨后出現(xiàn)的幾起案子溉旋,更是在濱河造成了極大的恐慌,老刑警劉巖邑闲,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苫耸,死亡現(xiàn)場(chǎng)離奇詭異儡陨,居然都是意外死亡量淌,警方通過查閱死者的電腦和手機(jī)呀枢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門裙秋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摘刑,“玉大人刻坊,你說我怎么就攤上這事⌒炜椋” “怎么了蛹锰?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵绰疤,是天一觀的道長(zhǎng)轻庆。 經(jīng)常有香客問我,道長(zhǎng)余爆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮桩砰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘硼莽。我一直安慰自己,他們只是感情好懂鸵,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布匆光。 她就那樣靜靜地躺著,像睡著了一般终息。 火紅的嫁衣襯著肌膚如雪采幌。 梳的紋絲不亂的頭發(fā)上休傍,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天磨取,我揣著相機(jī)與錄音柴墩,去河邊找鬼江咳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛歼指,可吹牛的內(nèi)容都是我干的踩身。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼琼娘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼脱拼!你這毒婦竟也來了挪拟?” 一聲冷哼從身側(cè)響起击你,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惯雳,沒想到半個(gè)月后石景,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揪荣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了椎例。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脖祈,死狀恐怖盖高,靈堂內(nèi)的尸體忽然破棺而出掏秩,到底是詐尸還是另有隱情蒙幻,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布诈豌,位于F島的核電站抒和,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庙洼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一油够、第九天 我趴在偏房一處隱蔽的房頂上張望蚁袭。 院中可真熱鬧,春花似錦石咬、人聲如沸揩悄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽删性。三九已至,卻和暖如春焕窝,著一層夾襖步出監(jiān)牢的瞬間蹬挺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工它掂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汗侵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓群发,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親发乔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栏尚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 一文讀懂Python多線程 1阐污、線程和進(jìn)程 計(jì)算機(jī)的核心是CPU笛辟,它承擔(dān)了所有的計(jì)算任務(wù)。它就像一座工廠围来,時(shí)刻在運(yùn)...
    星丶雲(yún)閱讀 1,458評(píng)論 0 4
  • 【threading模塊詳解】 模塊基本方法 該模塊定了的方法如下:threading.active_count(...
    奕劍聽雨閱讀 1,050評(píng)論 0 0
  • Python 多線程 多線程類似于同時(shí)執(zhí)行多個(gè)不同程序牛曹,多線程運(yùn)行有如下優(yōu)點(diǎn): 使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序...
    今早上閱讀 354評(píng)論 0 0
  • 多線程類似于同時(shí)執(zhí)行多個(gè)不同程序阅虫,多線程運(yùn)行有如下優(yōu)點(diǎn): 使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理颓帝。 ...
    氨基鈉閱讀 140評(píng)論 1 1
  • https://www.w3cschool.cn/python3/python3-multithreading.h...
    奇里霍納桑閱讀 207評(píng)論 0 0