python的多執行緒原來可以這樣解

2022-09-21 02:03:14 字數 3087 閱讀 8229

目錄

多執行緒類似於同時執行多個不同程式,多程式設計客棧執行緒執行有如下優點:

使用執行緒可以把佔據長時間的程式中的任務放到後台去處理。

使用者介面可以更加吸引人,比如使用者點選了乙個按鈕去觸發某些事件的處理,可以彈出乙個進度條來顯示處理的進度。

程式的執行速度可能加快。

在一些等待的任務實現上如使用者輸入、檔案讀寫和網路收發資料等,執行緒就比較有gycelrrdzn用了。在這種情況下我們可以釋放一些珍貴的資源如記憶體占用等等。

乙個程序裡面必然有乙個主線程。

建立執行緒的兩種方法

繼承thread類,並重寫它的run()方法

import threading

import time

class mythread(threading.thread):

def__ init__ (self, n):

super (mythread, self).__ init__()

self.n = n

def run(self):

print('以類的方式建立多執行緒',self.n)

time.sleep(3)

r1 = mythread(1)

r2 = mythread(2)

r1.start()

r2.start()

呼叫threading庫的thread類

import threading

import time

def test(x):

gycelrrdznprint(x)

time.sleep(2)

if __name__=='__main__':

t1 = threading.thread(target=test, args=(1,))

t2 = threading.thread(target=test, args=(2,))

t1.start()

t2.start()

守護執行緒此類執行緒的特點是,當程式中主線程及所有非守護執行緒執行結束時,未執行完畢的守護執行緒也會隨之消亡(進行死亡狀態),程式將結束執行。

#守護執行緒

import threading

import time

def run(n):

print('task',n)

time.sleep(1)

print('3s')

time.sleep(1)

print('2s')

time.sleep(1)

print('1s')

if __name__ == '__main__': #主線程

程式設計客棧t=threading.thread(target=run,args=('t1',))

t.setdaemon(true) #設定子執行緒為守護執行緒,守護主線程。主線程結束,子執行緒也立馬結束。必須在start() 方法呼叫之前設定

t.start()

print('end')

執行緒鎖1.互斥鎖

#互斥鎖

import threading

def run():

global x

lock.acquire() #申請鎖

x+=1

lock.release() #釋放鎖

if __name__=='__main__':

x=0res=

lock=threading.lock() #例項化執行緒鎖

for i in range(100): #100個執行緒

t=threading.thread(target=run)

t.start()

res.append(t)

for t in res:

t.join()

print(x)

2.遞迴鎖

import threading

def func(lock):

global gl_num

lock.acquire()

gl_num += 1

time.sleep(1)

print(gl_num)

lock.release()

if __name__ == '__main__':

gl_num = 0

lock = threading.rlock()

for i in range(10):

t = threading.thread(target=func,args=(lock,))

t.start()

練手:import threading

import time #匯入時間模組

#執行緒一:輸出當前的年月日時分秒

class mythread1(threading.thread):

def run(self):

while (true):

print(tim程式設計客棧e.asctime(time.localtime(time.time())))#輸出實時時間

time.sleep(1)

#執行緒二:name每2秒列印輸出4次結束

class mythread2(threading.thread):#繼承threading.thread

def __init__(self,name):#繼承父類的方法實現繼承threading.thread

super(mythread2, self).__init__()#super方法呼叫父類

self.name=name #例項化物件屬性

def run(self):#重寫thread類中的run方法

for i in range(4):#for迴圈列印4次

print(self.name)

time.sleep(2)#列印一次delay兩秒

if __name__ == '__main__':

#建立執行緒1和執行緒2並傳入引數

x1 = mythread1()

x2 = mythread2("張三")

#開啟執行緒

x1.start()

x2.start()

本文標題: python的多執行緒原來可以這樣解

本文位址:

python多執行緒 python多執行緒

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

黑馬程式設計師 原來這題可以這樣寫

windows phone 7手機開發 net培訓 期待與您交流!streamreader sr new streamreader d data.txt system.text.asciiencoding.default string line string.empty int max 0 int ...

python多執行緒 Python多執行緒的一些知識

了更好地體驗多執行緒爬蟲,本章先介紹下需要了解的知識點,以便後續的多執行緒爬蟲文章有更好的理解與學習。在接下來要講的知識點中,感興趣的讀者們請先弄清楚程序和執行緒兩者是什麼?它們各自有著什麼樣的關係呢?讀下廖雪峰老師簡單介紹的例子,比喻非常生動清晰,故這裡不多做講解。程序和執行緒 www.liaox...