python队列在进程传递_Python 进程队列
定義:
進(jìn)程彼此之間互相隔離,要實(shí)現(xiàn)進(jìn)程間通信(IPC),multiprocessing模塊支持兩種形式:隊(duì)列和管道,這兩種方式都是使用消息傳遞的,隊(duì)列需要導(dǎo)入multiprocessing 的Queue
Queue([maxsize]):創(chuàng)建共享的進(jìn)程隊(duì)列,Queue是多進(jìn)程安全的隊(duì)列,可以使用Queue實(shí)現(xiàn)多進(jìn)程之間的數(shù)據(jù)傳遞。
隊(duì)列方法:
主要方法:
q.put方法用以插入數(shù)據(jù)到隊(duì)列中,put方法還有兩個(gè)可選參數(shù):blocked和timeout。如果blocked為True(默認(rèn)值),并且timeout為正值,該方法會阻塞timeout指定的時(shí)間,直到該隊(duì)列有剩余的空間。如果超時(shí),會拋出Queue.Full異常。如果blocked為False,但該Queue已滿,會立即拋出Queue.Full異常。
q.get方法可以從隊(duì)列讀取并且刪除一個(gè)元素。同樣,get方法有兩個(gè)可選參數(shù):blocked和timeout。如果blocked為True(默認(rèn)值),并且timeout為正值,那么在等待時(shí)間內(nèi)沒有取到任何元素,會拋出Queue.Empty異常。如果blocked為False,有兩種情況存在,如果Queue有一個(gè)值可用,則立即返回該值,否則,如果隊(duì)列為空,則立即拋出Queue.Empty異常.
q.get_nowait():同q.get(False)
q.put_nowait():同q.put(False)
q.empty():調(diào)用此方法時(shí)q為空則返回True,該結(jié)果不可靠,比如在返回True的過程中,如果隊(duì)列中又加入了項(xiàng)目。
q.full():調(diào)用此方法時(shí)q已滿則返回True,該結(jié)果不可靠,比如在返回True的過程中,如果隊(duì)列中的項(xiàng)目被取走。
q.qsize():返回隊(duì)列中目前項(xiàng)目的正確數(shù)量,結(jié)果也不可靠,理由同q.empty()和q.full()一樣
其它方法:
1q.cancel_join_thread():不會在進(jìn)程退出時(shí)自動連接后臺線程。可以防止join_thread()方法阻塞2q.close():關(guān)閉隊(duì)列,防止隊(duì)列中加入更多數(shù)據(jù)。調(diào)用此方法,后臺線程將繼續(xù)寫入那些已經(jīng)入隊(duì)列但尚未寫入的數(shù)據(jù),但將在此方法完成時(shí)馬上關(guān)閉。如果q被垃圾收集,將調(diào)用此方法。關(guān)閉隊(duì)列不會在隊(duì)列使用者中產(chǎn)生任何類型的數(shù)據(jù)結(jié)束信號或異常。例如,如果某個(gè)使用者正在被阻塞在get()操作上,關(guān)閉生產(chǎn)者中的隊(duì)列不會導(dǎo)致get()方法返回錯(cuò)誤。3 q.join_thread():連接隊(duì)列的后臺線程。此方法用于在調(diào)用q.close()方法之后,等待所有隊(duì)列項(xiàng)被消耗。默認(rèn)情況下,此方法由不是q的原始創(chuàng)建者的所有進(jìn)程調(diào)用。調(diào)用q.cancel_join_thread方法可以禁止這種行為
實(shí)例:
from multiprocessing importQueue#q=Queue(3)#
#q.put('first')#q.put('second')#q.put('third')## q.put('fourth')#
#print(q.get())#print(q.get())#print(q.get())#print(q.get())
#了解
q=Queue(3)
q.put('first',block=False)
q.put('second',block=False)
q.put('third',block=False)#q.put_nowait('fourth') #q.put('fourth',block=False)
q.put('fourth',timeout=3)
總結(jié)
以上是生活随笔為你收集整理的python队列在进程传递_Python 进程队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: list mybatis批量保存_myb
- 下一篇: python 批量创建变量_Python