python學習筆記 多執行緒

2021-10-22 01:22:28 字數 4374 閱讀 8268

電腦同時執行有多個軟體,每乙個執行的軟體程式都是乙個程序。

每乙個應用程式內,有多段程式同時執行,每一段程式就是乙個執行緒。

python3 執行緒中常用的兩個模組為:

thread 模組已被廢棄。使用者可以使用 threading 模組代替。所以,在 python3 中不能再使用"thread" 模組。為了相容性,python3 將 thread 重新命名為 "_thread"。

# coding:utf-8

import _thread

# 定義乙個函式

def print_time(threadname):

for i in range(100):

print(threadname, ':', i)

'''建立兩個執行緒,並開啟兩個執行緒'''

_thread.start_new_thread(print_time, ("thread-1",))

_thread.start_new_thread(print_time, ("thread---------2",))

'''上面開啟的都是子執行緒,這裡是主線程,主線程要是結束,子執行緒就停止了'''

while 1:

pass

結果:

# coding:utf-8

import threading

class mythread(threading.thread):

def __init__(self, threadname):

threading.thread.__init__(self)

self.threadname = threadname

def run(self):

for i in range(100):

print(self.threadname, ':', i)

'''建立兩個執行緒,並開啟兩個執行緒'''

m1 = mythread("thread-1")

m2 = mythread("thread-2")

m1.start()

m2.start()

'''threading這種方式。即使主線程先執行完,程式也不會關閉,需要等子執行緒執行完'''

# coding:utf-8

import threading

# 定義乙個函式

def print_time(threadname):

for i in range(100):

print(threadname, ':', i)

'''建立兩個執行緒,並開啟兩個執行緒'''

t1=threading.thread(target=print_time,args=("thread-1",))

t2=threading.thread(target=print_time,args=("thread-2", ))

t1.start()

t2.start()

'''threading這種方式。即使主線程先執行完,程式也不會關閉,需要等子執行緒執行完'''

子執行緒設定成守護執行緒,相當於把子執行緒設定成主線程的守衛,小弟守衛老大的安全,老大(主線程)結束了,小弟(子執行緒)也就結束了 

# coding:utf-8

import threading

# 為執行緒定義乙個函式

def print_time(threadname):

for i in range(100):

print(threadname, ':', i)

'''建立兩個執行緒'''

t1 = threading.thread(target=print_time,args=("thread-1",))

t2 = threading.thread(target=print_time,args=("thread-2", ))

'''設定守護執行緒後,主線程結束時,子執行緒也將立即結束,不再執行。'''

t1.setdaemon(true) #把子程序設定為守護執行緒,必須在start()之前設定

t2.setdaemon(true) #把子程序設定為守護執行緒,必須在start()之前設定

'''開啟兩個執行緒'''

t1.start()

t2.start()

# coding:utf-8

import threading

# 為執行緒定義乙個函式

def print_time(threadname):

for i in range(100):

print(threadname, ':', i)

'''建立兩個執行緒'''

t1 = threading.thread(target=print_time,args=("thread-1",))

t2 = threading.thread(target=print_time,args=("thread-2", ))

'''設定守護執行緒後,主線程結束時,子執行緒也將立即結束,不再執行。'''

# t1.setdaemon(true) #把子程序設定為守護執行緒,必須在start()之前設定

# t2.setdaemon(true) #把子程序設定為守護執行緒,必須在start()之前設定

'''開啟兩個執行緒'''

t1.start()

t2.start()

t1.join() # 將自己加入到主線程的級別,執行結束,整個程式才可結束

t2.join() # 將自己加入到主線程的級別,執行結束,整個程式才可結束

使用 thread 物件的 lock 和 rlock 可以實現簡單的執行緒同步,這兩個物件都有 acquire 方法和 release 方法,對於那些需要每次只允許乙個執行緒操作的資料或**,可以將其操作放到 acquire 和 release 方法之間。

acquire 和 release之間的

資料或**

同一時間,只能同時被乙個執行緒占用

# coding:utf-8

from threading import thread,lock

import time

count = 0

#lock = lock()#建立鎖的鎖的物件

def print_time(threadname):

global count

for i in range(100):

count += 1

time.sleep(0.01)

#lock.acquire() # 獲得使用權

print(threadname, ':', count)

#lock.release()#釋放使用權

'''建立兩個執行緒'''

t1 = thread(target=print_time,args=("thread-1",))

t2 = thread(target=print_time,args=("thread-2", ))

'''開啟兩個執行緒'''

t1.start()

t2.start()

結果:(列印語句有可能兩個執行緒都在用,列印混亂)

lock = lock()#建立鎖的鎖的物件

def print_time(threadname):

global count

for i in range(100):

count += 1

time.sleep(0.01)

lock.acquire() # 獲得使用權

print(threadname, ':', count)

lock.release()#釋放使用權

'''建立兩個執行緒'''

t1 = thread(target=print_time,args=("thread-1",))

t2 = thread(target=print_time,args=("thread-2", ))

'''開啟兩個執行緒'''

t1.start()

t2.start()

結果:

Python學習筆記 多執行緒

引入多執行緒模組 import threading 任何乙個程序啟動的時候會預設的啟動乙個執行緒,這個執行緒叫主線程,主線程可以啟動新的子執行緒 獲取主當前執行緒的名稱 threading.current thread name 建立子執行緒 t threading.thread target fu...

Python學習筆記 多執行緒

簡單的多執行緒 import threading import time def run n print task n time.sleep 2 t1 threading.thread target run,args t1 t2 threading.thread target run,args t2...

Python學習筆記 多執行緒鎖

多執行緒的鎖 如果有多個執行緒同時操作乙個物件,如果沒有很好地保護該物件,會造成程式結果的不可預期 多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。因此需要用鎖threading.l...