python學習第三十一節
阿新 • • 發佈:2017-07-19
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 6def 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學習第三十一節