day39 程序 佇列

2022-08-24 10:09:13 字數 2620 閱讀 6268

#

佇列queue:程序之間資料是隔離的,不共享的,但是通過multiprocessing的queue可以實現程序之間的通訊。

#1、先進先出:把1 2 3放到佇列裡,按1 2 3的順序拿出來。

from multiprocessing import

queue

q =queue()

q.put(1)

q.put(2)

q.put(3)

print

(q.get())

print

(q.get())

print

(q.get())#1

#2#3

#2、當佇列沒有值時,繼續使用print(q.get())會導致程序阻塞:執行**之後不會出現process finished with exit code 0

from multiprocessing import

queue

q =queue()

q.put(1)

q.put(2)

q.put(3)

print

(q.get())

print

(q.get())

print

(q.get())

print(q.get()) #

阻塞。#

3、另外一種阻塞的情況是,例項化物件的長度不等於放進的長度:

from multiprocessing import

queue

q = queue(3) #

物件長度是3,也就是最多有3個元素。當放入多於3個元素,就會阻塞。

q.put(1)

q.put(2)

q.put(3)

q.put(4) #

放入第4個元素,阻塞,下面的**無法執行。

print

(q.get())

#4、實現主程序跟子程序之間的通訊:主程序可以拿到子程序放入的hello:

from multiprocessing import

queue

from multiprocessing import

process

defq_put(q):

q.put(

'hello')

if__name__ == '

__main__':

q =queue()

p = process(target=q_put,args=(q,))

p.start()

print(q.get()) #

主程序可以拿到子程序放入的hello

#hello

#5、子程序跟子程序之間的通訊:

from multiprocessing import

process

from multiprocessing import

queue

defq_put(q):

q.put(

'hello')

def q_get(q): #

拿到另外乙個子程序放入的hello,實現子程序跟子程序之間的通訊。

print

(q.get())

if__name__ == '

__main__':

q =queue()

p = process(target=q_put,args=(q,))

p.start()

p1 = process(target=q_get,args=(q,))

p1.start()

#hello

#6、生產者和消費者模型:以做包子為例:

from multiprocessing import

queue

from multiprocessing import

process

import

time

def producer(q): #

生產者,做包子

for i in range(100): #

因為托盤只能放10個包子,消費者吃乙個之後,生產者才生產乙個。

q.put(i) #

多於10的情況下,其他包子都在等待著生產。

defconsumer(q):

for i in range(100):

time.sleep(1) #

每個消費者一秒吃乙個

print

(q.get())

if__name__ == '

__main__':

q = queue(10) #

托盤只能放10個包子。這樣可以讓記憶體存放比較少的資料。

p = process(target=producer,args=(q,))

p.start()

for i in range(5): #

總共5個消費者

p1 = process(target=consumer,args=(q,))

p1.start()

#7、佇列是雙向通訊的(比較少使用):producer put的同時也可以get到consunmer put的資料。consumer get的同時也可以put資料到佇列裡

#被producer get到。

day 3 9基礎複習

1.不要在模組之間相互呼叫,否則會出現麻繩現象,避免迴圈匯入。用來判斷值是否相等 分別指向兩個空間,但是空間裡面的內容相同 is 判斷指向是否相等。例 a 11,22,33 b 11,22,33 a b true a is b false id a 1398041200093640 id b 139...

程式設計之旅 Day39

day39 學習內容 1.劍指offer 面試題32 從上到下列印二叉樹 面試題32 把二叉樹列印成多行 面試題32 按之字形順序列印二叉樹 面試題36 二叉搜尋樹與雙向鍊錶 3.華為機試題 例1 取近似值 例2 合併表記錄 例3 提取不重複的整數 題目描述 從上往下列印出二叉樹的每個節點,同層節點...

Day39 貪心 區間取點

傳送門 區間取點 給定n個區間,若讓每個區間至少包含乙個點,則需要至少幾個點?分析只需要按區間右端點排序 然後遍歷所有區間 逐個判斷上乙個點是否被包含在這個區間裡 若不在則加乙個點,再更新點位置 若在則跳過即可 我們初始化定為有乙個點在第乙個區間,並且點在其右端點 include includeus...