国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

Python中多線程的創(chuàng)建及基本調(diào)用方法

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 14:29:01
文檔

Python中多線程的創(chuàng)建及基本調(diào)用方法

Python中多線程的創(chuàng)建及基本調(diào)用方法:1. 多線程的作用 簡而言之,多線程是并行處理相互獨(dú)立的子任務(wù),從而大幅度提高整個任務(wù)的效率。 2. Python中的多線程相關(guān)模塊和方法 Python中提供幾個用于多線程編程的模塊,包括thread,threading和Queue等 thread模塊提供了基本的線程和鎖的支持,除產(chǎn)
推薦度:
導(dǎo)讀Python中多線程的創(chuàng)建及基本調(diào)用方法:1. 多線程的作用 簡而言之,多線程是并行處理相互獨(dú)立的子任務(wù),從而大幅度提高整個任務(wù)的效率。 2. Python中的多線程相關(guān)模塊和方法 Python中提供幾個用于多線程編程的模塊,包括thread,threading和Queue等 thread模塊提供了基本的線程和鎖的支持,除產(chǎn)

1. 多線程的作用
簡而言之,多線程是并行處理相互獨(dú)立的子任務(wù),從而大幅度提高整個任務(wù)的效率。

2. Python中的多線程相關(guān)模塊和方法
Python中提供幾個用于多線程編程的模塊,包括thread,threading和Queue等
thread模塊提供了基本的線程和鎖的支持,除產(chǎn)生線程外,也提供基本的同步數(shù)據(jù)結(jié)構(gòu)鎖對象,其中包括:
start_new_thread(function, args kwargs=None) 產(chǎn)生一個新的線程來運(yùn)行給定函數(shù)
allocate_lock() 分配一個LockType類型的鎖對象
exit() 讓線程退出
acquire(wait=None) 嘗試獲取鎖對象
locked() 如果獲取了鎖對象返回TRUE,否則返回FALSE
release() 釋放鎖
threading提供了更高級別,功能更強(qiáng)的線程管理功能
Thread類 表示一個線程的執(zhí)行的對象
Lock 鎖原語對象
RLock 可重入鎖對象,使單線程可以再次獲得已經(jīng)獲取鎖
queue模塊允許用戶創(chuàng)建一個可以用于多個線程之間共享數(shù)據(jù)的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
可用于進(jìn)程間的通訊,讓各個線程之間共享數(shù)據(jù)
模塊函數(shù)queue(size) 創(chuàng)建一個大小為size的Queue對象
queue對象函數(shù) qsize() 返回隊(duì)列大小
empty() 隊(duì)列為空返回True,否則返回False
put(item, block=0) 把ITEM放到隊(duì)列中,block不為0,函數(shù)會一直阻塞到隊(duì)列中
get(block=0) 從隊(duì)列中取一個對象,若果給block,函數(shù)會一直阻塞到隊(duì)列中有對象為止

3.示例
目前Python的lib中對多線程編程提供兩種啟動方法,一種是比較基本的thread模塊中start_new_thread方法,在線程中運(yùn)行一個函數(shù), 另一種是使用集成threading模塊的線程對象Thread類。
目前所用到的,是舊版本中調(diào)用thread模塊中的start_new_thread()函數(shù)來產(chǎn)生新的線程
相比而言,thread.start_new_thread(function,(args[,kwargs]))實(shí)現(xiàn)機(jī)制其實(shí)與C更為類似,其中function參數(shù)是將要調(diào)用的線程函數(shù);(args[,kwargs])是將傳遞給待創(chuàng)建線程函數(shù)的參數(shù)組成的元組類型,其中kwargs是可選的參數(shù)。新創(chuàng)建的線程結(jié)束一般依靠線程函數(shù)的執(zhí)行結(jié)束自動退出,或者在線程函數(shù)中調(diào)用thread.exit()拋出SystemExit exception,達(dá)到線程退出的目的。

print "=======================thread.start_new_thread啟動線程=============" 
import thread 
#Python的線程sleep方法并不是在thread模塊中,反而是在time模塊下 
import time 
def inthread(no,interval): 
 count=0 
 while count<10: 
 print "Thread-%d,休眠間隔:%d,current Time:%s"%(no,interval,time.ctime()) 
 #使當(dāng)前線程休眠指定時間,interval為浮點(diǎn)型的秒數(shù),不同于Java中的整形毫秒數(shù) 
 time.sleep(interval) 
 #Python不像大多數(shù)高級語言一樣支持++操作符,只能用+=實(shí)現(xiàn) 
 count+=1 
 else: 
 print "Thread-%d is over"%no 
 #可以等待線程被PVM回收,或主動調(diào)用exit或exit_thread方法結(jié)束線程 
 thread.exit_thread() 
#使用start_new_thread函數(shù)可以簡單的啟動一個線程,第一個參數(shù)指定線程中執(zhí)行的函數(shù),第二個參數(shù)為元組型的傳遞給指定函數(shù)的參數(shù)值 
thread.start_new_thread(inthread,(1,2)) 
 #線程執(zhí)行時必須添加這一行,并且sleep的時間必須足夠使線程結(jié)束,如本例 
 #如果休眠時間改為20,將可能會拋出異常 
time.sleep(30) 
''' 

使用這種方法啟動線程時,有可能出現(xiàn)異常

Unhandled exception in thread started by 
Error in sys.excepthook: 
Original exception was: 

解決:啟動線程之后,須確保主線程等待所有子線程返回結(jié)果后再退出,如果主線程比子線程早結(jié)束,無論其子線程是否是后臺線程,都將會中斷,拋出這個異常
若沒有響應(yīng)阻塞等待,為避免主線程提前退出,必須調(diào)用time.sleep使主線程休眠足夠長的時間,另外也可以采用加鎖機(jī)制來避免類似情況,通過在啟動線程的時候,給每個線程都加了一把鎖,直到線程運(yùn)行介紹,再釋放這個鎖。同時在Python的main線程中用一個while循環(huán)來不停的判斷每個線程鎖已釋放。

import thread; 
from time import sleep,ctime; 
from random import choice 
#The first param means the thread number 
#The second param means how long it sleep 
#The third param means the Lock 
def loop(nloop,sec,lock): 
 print "Thread ",nloop," start and will sleep ",sec; 
 sleep(sec); 
 print "Thread ",nloop," end ",sec; 
 lock.release(); 
 
def main(): 
 seconds=[4,2]; 
 locks=[]; 
 for i in range(len(seconds)) : 
 lock=thread.allocate_lock(); 
 lock.acquire(); 
 locks.append(lock); 
 
 print "main Thread begins:",ctime(); 
 for i,lock in enumerate(locks): 
 thread.start_new_thread(loop,(i,choice(seconds),lock)); 
 for lock in locks : 
 while lock.locked() : 
 pass; 
 print "main Thread ends:",ctime(); 
 
if __name__=="__main__" : 
 main(); 

很多介紹說在新python版本中推薦使用Threading模塊,目前暫沒有應(yīng)用到。。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Python中多線程的創(chuàng)建及基本調(diào)用方法

Python中多線程的創(chuàng)建及基本調(diào)用方法:1. 多線程的作用 簡而言之,多線程是并行處理相互獨(dú)立的子任務(wù),從而大幅度提高整個任務(wù)的效率。 2. Python中的多線程相關(guān)模塊和方法 Python中提供幾個用于多線程編程的模塊,包括thread,threading和Queue等 thread模塊提供了基本的線程和鎖的支持,除產(chǎn)
推薦度:
標(biāo)簽: 使用 使用方法 方式
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚州一区二区 | 日韩中文欧美 | 91啦在线播放 | 欧美日韩成人午夜免费 | 午夜在线观看免费视频 | 亚洲 欧美 中文 日韩欧美 | 国产精品电影一区二区三区 | 成人爽a毛片在线视频 | 伊人情人综合成人久久网小说 | h片免费在线观看 | 国产日韩欧美另类重口在线观看 | 国产高清不卡一区二区三区 | 欧美在线观看日韩欧美在线观看 | 久操久热 | 精品国产一区二区三区麻豆小说 | 91中文字幕在线观看 | 亚洲国产精品免费观看 | 国产成人一区在线播放 | 日本a v 黄 | 日韩综合在线 | 韩日视频在线 | 欧美亚洲综合网 | 欧美日韩a | 国产a免费视频 | 精品久久久久久综合日本 | 欧美专区日韩专区 | 亚洲欧美日韩国产色另类 | 草逼视频免费看 | 爱啪网亚洲第一福利网站 | 一级免费a | 国产日韩欧美91 | 日韩国产免费一区二区三区 | 日韩欧美一区二区三区在线视频 | 日韩手机在线 | 国产99在线播放 | 国产黄色视屏 | 久久婷婷色一区二区三区 | 国产精品成人一区二区 | 国产在线播放一区 | 就爱啪啪网 | 天天操夜夜草 |