多工可以由多程序完成,也可以由乙個程序內的多執行緒完成。執行緒是作業系統直接支援的執行單元,python的標準庫提供了兩個模組_thread(低階模組)和threading(高階模組),大部分情況下選擇用threading模組。
import time
import threading
# 新執行緒執行
defloop
(num)
:print
(f"執行緒正在執行..."
) n =
0while n < num:
n +=
1print
(f"執行緒 >>> "
) time.sleep(1)
print
(f"執行緒結束"
)print
(f"執行緒正在執行..."
)t = threading.thread(target=loop, name=
'loopthread'
, args=(5
,))# 通過傳參的方式呼叫區域性變數
t.start(
)t.join(
)print
(f"執行緒執行結束."
)# 結果
'''執行緒mainthread正在執行...
執行緒loopthread正在執行...
執行緒loopthread >>> 1
執行緒loopthread >>> 2
執行緒loopthread >>> 3
執行緒loopthread >>> 4
執行緒loopthread >>> 5
執行緒loopthread結束.
執行緒mainthread執行結束.
'''
乙個程序中的執行緒共享相同的記憶體單元、記憶體位址空間,可以訪問相同的變數和物件,而且他們從同一堆中分配物件,通訊、資料交換、同步操作,缺點執行緒是對全域性變數隨意修改,可能造成多執行緒之間對全域性變數的混亂(不安全),可以通過傳參的方式呼叫全域性變數(不適用可變型別),但是修改次數過多,會有多次執行緒切換,產生紊亂。
# 給執行緒加鎖,實現執行緒按順序執行
from threading import thread, lock
import time
class
task1
(thread)
:def
run(self)
:while
true
:if lock1.acquire():
# 獲取鎖物件
print
("--task1--"
) time.sleep(1)
lock2.release(
)# 釋放鎖
class
task2
(thread)
:def
run(self)
:while
true
:if lock2.acquire():
print
("--task2--"
) time.sleep(1)
lock3.release(
)class
task3
(thread)
:def
run(self)
:while
true
:if lock3.acquire():
print
("--task3--"
) time.sleep(1)
lock1.release(
)lock1 = lock(
)lock2 = lock(
)lock2.acquire(
)lock3 = lock(
)lock3.acquire(
)t1 = task1(
)t2 = task2(
)t3 = task3(
)t1.start(
)t2.start(
)t3.start(
)# 結果
'''--task1--
--task2--
--task3--
--task1--
--task2--
--task3--..
.'''
thread物件的屬性和方法屬性
描述****thread物件資料屬性****
name
執行緒名
ident
執行緒的識別符號
daemon
布林標誌,表示這個執行緒是否是守護執行緒
****thread物件方法****
__init__(group=none, target=none, name=none, args=(), kwargs={}, verbose=none, daemon=none)
例項化乙個執行緒物件,需要有乙個可呼叫的target
,以及其引數args
或者kwargs
。還可以傳遞name
或者group
引數,不過後者還未實現。此外,verbose
標誌也是可選的,而daemon
的值將會設定thread.daemon
屬性/標誌。
start()
開始執行執行緒
run()
定義執行緒功能的方法(通常在子類中被應用開發者重寫)
join(timeout=none)
直至啟動執行緒終止之前一直掛起,除非給出了timeout,否則會一直阻塞
getname()
返回執行緒名
setname(name)
設定執行緒名
isalivel/is_alive()
布林標誌,表示這個程序是否還存活
isdaemon()
如果是守護執行緒,則返回true,否則返回false
setdaemon(daemonic)
作業系統知識
開篇思考 當看到這個標題的第一眼的時候你大腦中在思考什麼?我在想什麼是作業系統呢?他到底有什麼作用呢?其實說到這個問題是因為在自考中有這麼乙個問答題,作業系統的出現對計算機產生了什麼影響?考過此題的應該有印象吧 仔細思考一下,當初自己是怎麼答的呢?自己在做那道簡答題的時候最先想到的就是 01 和一些...
作業系統知識
對於有執行緒系統 對於無線程系統 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。在任意時刻只允許乙個執行緒對共享資源進行訪問,如果有多個執行緒試圖訪問公共資源,那麼在有乙個執行緒進入後,其他試圖訪問公共資源的執行緒將被掛起,並一直等到進入臨界區的執行緒離開,臨界區在被...
python 實現作業系統的常見操作
1.返回作業系統型別 import os from os.path import exists,splitext,join 1.返回作業系統型別 print os.name 值為posix,是linux系統,如果是nt,是windows系統 執行結果 posix2.作業系統的詳細資訊 import ...