日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python多线程学习教程

發(fā)布時(shí)間:2025/4/5 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python多线程学习教程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先我們來解釋一下多線程:多線程我們可以理解為多個(gè)進(jìn)程/多個(gè)程序同時(shí)運(yùn)行,多線程最大的好處就是幫助我們提高效率,平常我們1小時(shí)完成的任務(wù),通過多線程10分鐘就可以完成,甚至更短,這個(gè)就取決于你的線程數(shù)啦。

多線程會(huì)給我們帶來什么:好處:它可以大大提高我們代碼處理數(shù)據(jù)的速度;缺點(diǎn):代碼的復(fù)雜度也將隨之提高,死鎖問題也將隨之產(chǎn)生。

我們?cè)撊绻胧侄嗑€程:先嘗試著成功運(yùn)行一份多線程代碼。然后再解讀這份代碼,依據(jù)自己現(xiàn)有的知識(shí)去理解這份代碼,遇到不懂的地方記下來,然后帶著這些疑問去看小編的教程你會(huì)發(fā)現(xiàn)事半功倍的。學(xué)完后記得自己寫幾個(gè)多線程加以訓(xùn)練。

這是小編為大家準(zhǔn)備的一份多線程示范代碼:

#!/usr/bin/python3import queue import threading import timeexitFlag = 0class myThread (threading.Thread):def __init__(self, threadID, name, q):threading.Thread.__init__(self)self.threadID = threadIDself.name = nameself.q = qdef run(self):print ("開啟線程:" + self.name)process_data(self.name, self.q)print ("退出線程:" + self.name)def process_data(threadName, q):while not exitFlag:queueLock.acquire()if not workQueue.empty():data = q.get()queueLock.release()print ("%s processing %s" % (threadName, data))else:queueLock.release()time.sleep(1)threadList = ["Thread-1", "Thread-2", "Thread-3"] nameList = ["One", "Two", "Three", "Four", "Five"] queueLock = threading.Lock() workQueue = queue.Queue(10) threads = [] threadID = 1# 創(chuàng)建新線程 for tName in threadList:thread = myThread(threadID, tName, workQueue)thread.start()threads.append(thread)threadID += 1# 填充隊(duì)列 queueLock.acquire() for word in nameList:workQueue.put(word) queueLock.release()# 等待隊(duì)列清空 while not workQueue.empty():pass# 通知線程是時(shí)候退出 exitFlag = 1# 等待所有線程完成 for t in threads:t.join() print ("退出主線程")

運(yùn)行結(jié)果:

開啟線程: Thread-1 開啟線程: Thread-2 Thread-1: Wed Apr 6 11:52:57 2017 Thread-1: Wed Apr 6 11:52:58 2017 Thread-1: Wed Apr 6 11:52:59 2017 Thread-2: Wed Apr 6 11:53:01 2017 Thread-2: Wed Apr 6 11:53:03 2017 Thread-2: Wed Apr 6 11:53:05 2017 退出主線程

?

一、使用Threading模板塊創(chuàng)建線程:

1,函數(shù)方法介紹:

  • run():用以表示線程活動(dòng)的方法
  • start():啟動(dòng)線程活動(dòng)
  • join([time]):等待至線程中止。這阻塞調(diào)用線程直至線程的join() 方法被調(diào)用中止-正常退出或者拋出未處理的異常-或者是可選的超時(shí)發(fā)生。
  • isAlive():檢查一個(gè)線程是否仍舊在進(jìn)行
  • getName():返回一個(gè)線程的名字
  • setName():設(shè)置一個(gè)線程的名字

2,要使用theading模板實(shí)現(xiàn)一個(gè)新線程,你要做的有:

定義Thread類的一個(gè)子類

????重寫__init__(self [,args])方法

????然后,重寫run(self [,args])方法

????在你創(chuàng)建新的Thread子類以后,你可以創(chuàng)建它的一個(gè)實(shí)例,然后引用start()來開啟一個(gè)新線程。

?

二、同步線程

如果多個(gè)線程共同對(duì)某個(gè)數(shù)據(jù)修改,則可能出現(xiàn)不可預(yù)料的結(jié)果,為了保證數(shù)據(jù)的正確性,需要對(duì)多個(gè)線程進(jìn)行同步。

引入“鎖”的概念,鎖的兩種狀態(tài)——鎖定和未鎖定

鎖定:鎖定部分代碼不能被其他程序運(yùn)行

未鎖定:多個(gè)線程可以同時(shí)運(yùn)行這部分

threadLock = threading.Lock() #獲取鎖,對(duì)下面代碼進(jìn)行鎖定,保持線程同步 threadLock.acquire() #釋放鎖,解除上方代碼的鎖定,讓其他進(jìn)程進(jìn)入 threadLock.release()

?

三、多線程優(yōu)先級(jí)隊(duì)列:

Queue模塊允許你創(chuàng)建一個(gè)新的隊(duì)列對(duì)象,以盛放一定數(shù)量的項(xiàng)目

控制Queue有以下方法:

  • get():從隊(duì)列移除一個(gè)項(xiàng)目并返回它
  • put():把項(xiàng)目放入隊(duì)列
  • qsize():返回當(dāng)前隊(duì)列中項(xiàng)目的數(shù)量
  • empty():如果隊(duì)列為空,返回True,反之為False
  • full():如果隊(duì)列滿了返回True,反之為False

?

總結(jié)

以上是生活随笔為你收集整理的Python多线程学习教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。