python threading模塊操作多線(xiàn)程介紹
python是支持多線(xiàn)程的,并且是native的線(xiàn)程。主要是通過(guò)thread和threading這兩個(gè)模塊來(lái)實(shí)現(xiàn)的。thread是比較底層的模塊,threading是對(duì)thread做了一些包裝的,可以更加方便的被使用。這里需要提一下的是python對(duì)線(xiàn)程的支持還不夠完善,不能利用多CPU,但是下個(gè)版本的python中已經(jīng)考慮改進(jìn)這點(diǎn),讓我們拭目以待吧。
threading模塊里面主要是對(duì)一些線(xiàn)程的操作對(duì)象化了,創(chuàng)建了叫Thread的class。一般來(lái)說(shuō),使用線(xiàn)程有兩種模式,一種是創(chuàng)建線(xiàn)程要執(zhí)行的函數(shù),把這個(gè)函數(shù)傳遞進(jìn)Thread對(duì)象里,讓它來(lái)執(zhí)行;另一種是直接從Thread繼承,創(chuàng)建一個(gè)新的class,把線(xiàn)程執(zhí)行的代碼放到這個(gè)新的class里。我們來(lái)看看這兩種做法吧。
#-*- encoding: gb2312 -*-
import string, threading, time
def thread_main(a):
global count, mutex
# 獲得線(xiàn)程名
threadname = threading.currentThread().getName()
for x in xrange(0, int(a)):
# 取得鎖
mutex.acquire()
count = count + 1
# 釋放鎖
mutex.release()
print threadname, x, count
time.sleep(1)
def main(num):
global count, mutex
threads = []
count = 1
# 創(chuàng)建一個(gè)鎖
mutex = threading.Lock()
# 先創(chuàng)建線(xiàn)程對(duì)象
for x in xrange(0, num):
threads.append(threading.Thread(target=thread_main, args=(10,)))
# 啟動(dòng)所有線(xiàn)程
for t in threads:
t.start()
# 主線(xiàn)程中等待所有子線(xiàn)程退出
for t in threads:
t.join()
if __name__ == '__main__':
num = 4
# 創(chuàng)建4個(gè)線(xiàn)程
main(4)
上面的就是第一種做法,這種做法是很常見(jiàn)的,下面是另一種,曾經(jīng)使用過(guò)Java的朋友應(yīng)該很熟悉這種模式:
#-*- encoding: gb2312 -*-
import threading
import time
class Test(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self._run_num = num
def run(self):
global count, mutex
threadname = threading.currentThread().getName()
for x in xrange(0, int(self._run_num)):
mutex.acquire()
count = count + 1
mutex.release()
print threadname, x, count
time.sleep(1)
if __name__ == '__main__':
global count, mutex
threads = []
num = 4
count = 1
# 創(chuàng)建鎖
mutex = threading.Lock()
# 創(chuàng)建線(xiàn)程對(duì)象
for x in xrange(0, num):
threads.append(Test(10))
# 啟動(dòng)線(xiàn)程
for t in threads:
t.start()
# 等待子線(xiàn)程結(jié)束
for t in threads:
t.join()
- 詳解Python的多線(xiàn)程定時(shí)器threading.Timer
- Python多線(xiàn)程編程之threading模塊詳解
- Python 多線(xiàn)程之threading 模塊的使用
- Python 多線(xiàn)程,threading模塊,創(chuàng)建子線(xiàn)程的兩種方式示例
- Python多線(xiàn)程threading模塊用法實(shí)例分析
- Python用threading實(shí)現(xiàn)多線(xiàn)程詳解
- Python多線(xiàn)程編程(三):threading.Thread類(lèi)的重要函數(shù)和方法
- python?包之?threading?多線(xiàn)程
相關(guān)文章
Python+OpenCV實(shí)戰(zhàn)之實(shí)現(xiàn)文檔掃描
這篇文章主要為大家詳細(xì)介紹了Python+Opencv如何實(shí)現(xiàn)文檔掃描的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-09-09
使用Python裝飾器在Django框架下去除冗余代碼的教程
這篇文章主要介紹了使用Python裝飾器在Django框架下去除冗余代碼的教程,主要是處理JSON代碼的一些冗余,需要的朋友可以參考下2015-04-04
Pycharm 2020.1 版配置優(yōu)化的詳細(xì)教程
這篇文章主要介紹了更新Pycharm 2020.1 版配置優(yōu)化的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
對(duì)python的unittest架構(gòu)公共參數(shù)token提取方法詳解
今天小編就為大家分享一篇對(duì)python的unittest架構(gòu)公共參數(shù)token提取方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
python實(shí)現(xiàn)將json多行數(shù)據(jù)傳入到mysql中使用
這篇文章主要介紹了python實(shí)現(xiàn)將json多行數(shù)據(jù)傳入到mysql中使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Jetson?NX?配置?pytorch的問(wèn)題及解決方法
這篇文章主要介紹了Jetson?NX?配置?pytorch的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
使用python+whoosh實(shí)現(xiàn)全文檢索
今天小編就為大家分享一篇使用python+whoosh實(shí)現(xiàn)全文檢索,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Python pyautogui模擬鍵盤(pán)輸入操作的示例詳解
在自動(dòng)化辦公和提高工作效率的今天,Python的pyautogui庫(kù)成為了我們模擬鍵盤(pán)和鼠標(biāo)操作的得力助手,下面我們看看如何使用pyautogui來(lái)模擬鍵盤(pán)輸入吧2025-03-03
Python使用crontab模塊設(shè)置和清除定時(shí)任務(wù)操作詳解
這篇文章主要介紹了Python使用crontab模塊設(shè)置和清除定時(shí)任務(wù)操作,結(jié)合實(shí)例形式分析了centos7平臺(tái)上Python安裝、python-crontab模塊安裝,以及基于python-crontab模塊的定時(shí)任務(wù)相關(guān)操作技巧,需要的朋友可以參考下2019-04-04

