国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python多線程實例教程

2020-02-23 05:46:49
字體:
來源:轉載
供稿:網友

本文以實例形式較為詳細的講解了Python的多線程,是Python程序設計中非常重要的知識點。分享給大家供大家參考之用。具體方法如下:

用過Python的人都會覺得Python的多線程很類似于Java的多線程機制,但是比JAVA的多線程更靈活。在早期的Python多線程實現中,采用了thread模塊。例如:  

from time import ctime,sleep from thread import start_new_thread def loop1():   print "enter loop1:",ctime();   sleep(3);   print "leave loop1:",ctime();  def loop2():   print "enter loop2:",ctime();   sleep(5);   print "leave loop2:",ctime();  def main():   print "main begin:",ctime();   start_new_thread(loop1, ());   start_new_thread(loop2,());   sleep(8);   print "main end:",ctime();  if __name__=="__main__":   main(); 

簡單介紹下這個代碼塊中的函數功能,sleep是線程睡眠時間,幾乎等價于JAVA中的Thread.sleep(millionseconds)

start_new_thread是實例化一個線程并運行的方法,方法的第一個參數接受一個線程運行時所執行的函數對象,第二個參數是方法執行時所需要的參數,以一個元組的形式傳入。  

這大概是最早期的Python多線程實現了,注意代碼中的main線程里的sleep(8)。這里的睡眠時間只能比3+5大,而不能小。如果小于這個時間,那么main主線程會提前退出,導致無論其子線程是否是后臺線程,都將會中斷,從而拋出線程中斷異常,類似于Java的ThreadInterruptException。這個致命的影響幾乎就是這個模塊后期被拋棄的罪魁禍首。

當然在早期的Python多線程中,你可以利用加鎖的機制來避免出現這個情況。稍微改動下以上代碼:

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線程運行時加入了鎖監控機制,介紹下紅色字體標志的幾個方法(其實紅色字體中的lock實質是thread.lockType實例。

從以上介紹可以看出這個Lock類非常類似于JDK5.0中的java.util.concurrent.locks.Lock。不知道Doug Lea有沒有參與這個模塊的開發,只是比JAVA中的LOCK類多了一個方法locked,用于檢測Lock對象是否還處于加鎖的狀態。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东莞市| 甘泉县| 桑植县| 樟树市| 高邮市| 鄂托克前旗| 淮北市| 呼图壁县| 屏东市| 炉霍县| 任丘市| 铁岭市| 德化县| 偃师市| 大埔县| 衡山县| 延津县| 霞浦县| 包头市| 巴彦县| 石嘴山市| 鹿泉市| 金平| 弋阳县| 东乌| 东光县| 南昌县| 汉寿县| 贡嘎县| 唐海县| 尼勒克县| 米泉市| 澜沧| 康保县| 阿拉善盟| 普陀区| 福贡县| 凤台县| 甘德县| 桐城市| 舟山市|