1. 程式人生 > >python學習第三十一節

python學習第三十一節

div 完成 聯系 info 所有 沒有 進程pid star 標誌位

event模塊
event.wait() 等待相當於標誌位為False。()內可以傳參數數字,為幾秒。
event.set()給另一個線程傳標誌位True。

技術分享

隊列 queue
和列表類似,但是函數內置了互斥鎖,保證了線程安全。是具有線程安全的數據結構。

技術分享

put傳進去,get取出來,取是先進先出的方法,吃了拉,而且queue沒有別的方法。

技術分享

上圖這種情況沒有意義,最後一次get取不到值在等待put 單線程寫到後面的put並不能運行,需要再
開一個線程。
取值之後,queue就少了一個。

技術分享

如上圖put裏寫block=False參數,當queue滿了在添加,將報錯而不是卡死。

技術分享

上圖如上上圖效果一樣,寫法不一樣。

技術分享

如上圖,get參數可以寫block=False 當取不到值的時候立刻報錯。

技術分享

上圖和上上圖效果一樣,寫法不一樣。

技術分享

put之後加入一個join可以阻塞該子線程後面的程序,然後另一個線程取出來需要每次都要task_done()
表示執行完畢,當所有任務完成之後會繼續上一個線程的後面任務。

q.empty()

如果queue為空布爾值為True

priority優先級

技術分享

技術分享

如上圖,設置優先級的例子。

技術分享

技術分享

生產者消費者模型

技術分享

多進程

技術分享

 1 from multiprocessing import Process#import
 2 import os
 3 import time
 4 
 5 
 6
def info(name): 7 ‘‘‘打印父進程PID和進程PID‘‘‘ 8 print("name:", name)#打印名字 9 print(parent process:, os.getppid())#獲取父進程ID 10 print(process id:, os.getpid())#獲取子進程ID 11 print("------------------") 12 time.sleep(1) 13 14 15 def foooooo(name): 16 ‘‘‘調用info‘‘‘ 17 info(name)
18 19 20 if __name__ == __main__: 21 info(main process line) 22 23 process_one = Process(target=info, args=(alvin,))#創建一個進程 24 process_two = Process(target=foooooo, args=(egon,)) 25 process_one.start()#激活這個進程 26 process_two.start() 27 28 process_one.join()#進程的join和線程的join是一樣的,子進程運行結束之後運行主進程 29 process_two.join() 30 31 print("ending")#主進程

多進程的聯系。

python學習第三十一節