程序補充與執行緒

2022-03-22 05:17:48 字數 1936 閱讀 9623

佇列:先進先出。堆疊:先進後出。

概念介紹:建立共享的程序佇列,可以通過queue實現多程序之間的資料傳遞。

from multiprocessing import

queue

q = queue(3) #

括號內可以傳引數 表示的是這個佇列的最大儲存數

q.put(1) #

往佇列中新增資料

q.put(2)

#print(q.full()) # 判斷佇列是否滿了

q.put(3)

#q.put(4) # 當佇列滿了之後,再放入資料不會報錯,會原地等待 直到佇列中有資料被取走(此時為阻塞態)

print

(q.get())

print

(q.get())

print(q.empty()) #

判斷佇列中的資料是否取完

print

(q.get())

#print(q.get_nowait()) # 取值,如果沒有值會直接報錯

#print(q.get()) # 當佇列中的資料被取完之後,再次去取值,程式就會阻塞,直到有人往佇列中放入值。

其中(full,get_nowait,empty)都不適用於多程序的情況

1.什麼是執行緒?為何有執行緒?怎麼用執行緒?

1)什麼是執行緒

執行緒是乙個抽象的概念。(三個執行緒就是有三段**在執行,三個程序就是有三個記憶體空間建立)。

程序只是資源單位。執行緒才是執行單位。

將記憶體比如成工廠,那麼程序就相當於是工廠裡面的車間,而你的執行緒就相當於是車間裡面的流水線。

2)為何有執行緒

乙個程序內可以起多個執行緒,並且執行緒與執行緒之間資料是共享的。

ps:開啟執行緒的開銷要遠遠小於開啟程序的開銷。

2.開啟執行緒的兩種方式 

開執行緒不需要寫到main下,但是為了規範還是要寫main。

方式一:匯入thread模組

from threading import

thread

import

time

deftask(name):

print('

%s is running

' %name)

time.sleep(3)

if__name__ == '

__main__':

t=thread(target=task,args=('

egon

',))

t.start()

print('

主線程'

)方式二:建立類繼承thread

from threading import

thread

import

time

class

mythread(thread):

defrun(self):

print('

%s is running

' %self.name)

time.sleep(3)

if__name__ == '

__main__':

t=mythread()

t.start()

print('

主線程')

3 執行緒vs程序 

同一程序內的執行緒們共享該程序內的資源,不同程序內的執行緒資源肯定是隔離的。

建立執行緒的開銷比建立程序要小得多。

1)、 執行緒中沒有父子關係。相較於子執行緒、主線程特殊之處在於其代變了主程序的生命週期。

主程序等待子程序結束然後結束,是為子程序**資源。

主線程等待子執行緒結束然後結束,是等待這個程序的**(其他非守護執行緒)執行完畢。

2)、同乙個程序中的所有執行緒pid都是一樣的,且資源共享。

3)、 執行緒建立開銷小:子執行緒建立不需要向作業系統申請記憶體空間,直接執行程式。

程序執行緒補充

multiprocessing.current process 顯示當前程序 threading.current thread 顯示當前執行緒pro name.join thr name.join pro name.terminate multiprocessing.current process ...

程序和執行緒 另補充殭屍程序和孤兒程序

程序的全域性資料,程序的位址空間等等,這些都屬於程序 執行緒也有自己的資源,比如棧,私有資料程序切換比執行緒切換開銷大 因為程序切換時要切頁表,而且往往伴隨著頁排程,因為程序的資料段 段要換出去,以便把將要執行的程序的內容換進來。本來程序的內容就是執行緒的超集。而執行緒只需要儲存執行緒的上下文 相關...

程序與執行緒

程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...