2015 12 25 第九天覆習

2022-08-26 04:54:09 字數 2378 閱讀 8696

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

執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有乙個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

每個執行緒都有他自己的一組cpu暫存器,稱為執行緒的上下文,該上下文反映了執行緒上次執行該執行緒的cpu暫存器的狀態。

指令指標和堆疊指標暫存器是執行緒上下文中兩個最重要的暫存器,執行緒總是在程序得到上下文中執行的,這些位址都用於標誌擁有執行緒的程序位址空間中的記憶體。

開始學習python執行緒

python中使用執行緒有兩種方式:函式或者用類來包裝執行緒物件。

函式式:呼叫thread模組中的start_new_thread()函式來產生新執行緒。語法如下:

thread.start_new_thread ( function, args[, kwargs] )
引數說明:

import

thread

import

time

#為執行緒定義乙個函式

defprint_time( threadname, delay):

count =0

while count < 5:

time.sleep(delay)

count += 1

print

"%s: %s

" %( threadname, time.ctime(time.time()) )

#建立兩個執行緒

try:

thread.start_new_thread( print_time, (

"thread-1

", 2, ) )

thread.start_new_thread( print_time, (

"thread-2

", 4, ) )

except

:

print

"error: unable to start thread

"while 1:

pass

執行緒模組

python通過兩個標準庫thread和threading提供對執行緒的支援。thread提供了低階別的、原始的執行緒以及乙個簡單的鎖。

thread 模組提供的其他方法:

除了使用方法外,執行緒模組同樣提供了thread類來處理執行緒,thread類提供了以下方法:

使用threading模組建立執行緒

使用threading模組建立執行緒,直接從threading.thread繼承,然後重寫__init__方法和run方法:

import

threading

import

time

exitflag =0

class mythread (threading.thread): #

繼承父類threading.thread

def__init__

(self, threadid, name, counter):

threading.thread.

__init__

(self)

self.threadid =threadid

self.name =name

self.counter =counter

def run(self): #

把要執行的**寫到run函式裡面 執行緒在建立後會直接執行run函式

print

"starting

" +self.name

print_time(self.name, self.counter, 5)

print

"exiting

" +self.name

defprint_time(threadname, delay, counter):

while

counter:

ifexitflag:

thread.exit()

time.sleep(delay)

print

"%s: %s

" %(threadname, time.ctime(time.time()))

counter -= 1

#建立新執行緒

thread1 = mythread(1, "

thread-1

", 1)

thread2 = mythread(2, "

thread-2

", 2)

#開啟執行緒

thread1.start()

thread2.start()

print

"exiting main thread

"

集訓第九天

今天就看了乙個迪傑斯特拉演算法,他的方法就是從乙個頂點出發,找出這個到與它相關頂點的所有路徑,然後在找出其中最小的,作為基量,一次類推 如下 include define inf 0x7fffffff define maxn 50 int matrix maxn maxn void dijkstra...

開課第九天

畫布 1今天是開課第九天,上午講了關於方法的題,下午講了新知識,嗯,今天有點熱,下面就是本寶寶今天的收穫 1 過載 方法名相同,引數列表不同叫做過載,和返回值型別無關。過載方法名必須一致,引數列表不同,和返回值型別無關。引數列表不同 個數不同,順序不同,型別不同 方法過載的時候編譯器會自動找到最適合...

學習第九天

怎麼沒有題面?我怎麼知道?換個鏈結吧!向洛谷勢力低頭 我們畫一下這個小螞蟻走出來的圖形,我們就會發現,是乙個類似長城的形狀 這個題,求最大值,我們應該能很容易想到用動態規劃 那麼對於乙個路徑圍成的圖形,我們需要描述的是它的位置和形狀,所以這顯然是個高維的dp 位置很好描述,但是形狀太複雜了,我們怎麼...