電腦同時執行有多個軟體,每乙個執行的軟體程式都是乙個程序。
每乙個應用程式內,有多段程式同時執行,每一段程式就是乙個執行緒。
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...