作業系統知識 python實現多執行緒

2021-10-07 22:24:53 字數 3198 閱讀 8513

多工可以由多程序完成,也可以由乙個程序內的多執行緒完成。執行緒是作業系統直接支援的執行單元,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 ...