python多執行緒解析

2021-07-25 21:19:31 字數 2479 閱讀 8844

我們知道python中程式一般是衝上往下一次執行的,那麼及時沒有什麼聯絡的兩件事也只能是等乙個執行完後再去執行另乙個,這樣就會浪費時間,有沒有辦法讓兩件事情同事進行呢?這就涉及到了多執行緒。

首先我們來看一下在單執行緒的執行效果:

#coding:utf-8

from time import ctime,sleep

deff1

():for i in range(3):

print

u'看書...',ctime()

sleep(1)

deff2

():for i in range(3):

print

u'聽**...',ctime()

sleep(1)

if __name__=='__main__':

f1()

f2()

print

'over...',ctime()

這是執行結果

從上圖的執行結果中可以看出,程式就是等第乙個函式執行完再去執行第二個函式,如果想要邊聽**變看書怎麼辦呢?那就需要用到python中的多執行緒模組了.python中支援多執行緒的模組有thread、threading、queue等。

**如下:

#coding:utf-8

import thread

from time import ctime,sleep

deff1

():for i in range(3):

print

u'看書...',ctime()

sleep(1)

deff2

():for i in range(3):

print

u'聽**...',ctime()

sleep(1)

if __name__=='__main__':

thread.start_new_thread(f1,())

thread.start_new_thread(f2,())

這是執行結果

從上圖我們可以看到書和聽**是在同一時間執行的,也就是實現了邊聽課邊看書。基於thread模組的start_new_thread方法已經不推薦使用了,在idle中這段**可以正確執行,在其他環境下可能會報如下錯誤

原因:啟動執行緒之後,須確保主線程等待所有子執行緒返回結果後再退出,如果主線程比子執行緒早結束,無論其子執行緒是否是後台執行緒,都將會中斷,丟擲這個異常

**如下:

#coding:utf-8

import threading

from time import ctime,sleep

deff1

():for i in range(4):

print

u'看書...',ctime()

sleep(1)

deff2

():for i in range(2):

print

u'聽**...'.ctime()

sleep(1)

threads=

t1=threading.thread(target=f1)

t2=threading.thread(target=f2)

if __name__=='__main__':

print

u'開始時間',ctime()

for i in threads:

t.setdaemon(true)

t.start()

for t in threas:

t.join()

print

u'結束',ctime()

這是執行結果

上面的例子中,當所有的縣城都分配完成之後,通過呼叫每個縣城的start()方法開始執行,相比於管理一組鎖(分配、獲取、釋放檢查鎖狀態)而言,只需要每個縣城呼叫join()的方法,等待執行緒的結束。

python多執行緒 python多執行緒

通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...

多執行緒細節解析

在學習完多執行緒後,分析一下一下兩種方法建立4個執行緒的不同之處!建立執行緒方法1 public static void main 建立執行緒方法2 public static void main 方法1和方法2都是建立了4個執行緒,類mythread實現了runnable介面 方法1是用for迴圈...

python多執行緒詳解 Python多執行緒詳解

前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...