日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 队列 锁_python-day31(同步锁,队列)

發布時間:2025/3/19 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 队列 锁_python-day31(同步锁,队列) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 守護進程

守護進程: 主進程的代碼運行結束,守護進程也跟著結束

1 主進程創建守護進程2 其一:守護進程會在主進程代碼執行結束后就終止3 其二: 守護進程內無法才開啟子進程, 否則拋出異常:4 AssertionError: daemonic processes are notallowed to have children5 注意: 進程之間是相互獨立的, 主進程代碼運行結束,守護進程隨機終止

View Code

代碼如下:

from multiprocessing importProcessimporttimedeffun():

time.sleep(2)print('子進程打印不出來')if __name__ == '__main__':

p= Process(target=fun )

p.daemon= True #守護進程

p.start()print('結束')

二. 進程同步

1. 同步鎖(互斥鎖) ***************

保證數據安全用的,但是將鎖起來的那段代碼的執行變成了同步\串行,

犧牲了效率,保證了安全

from  multiprocessing  import  Lock

l = Lock()

l.acquire() #鎖住

數據操作

l.release() #釋放

#由并發變成了串行,犧牲了運行效率,但避免了競爭

from multiprocessing importProcess,Lockimportos,timedefwork(n,lock):#加鎖,保證每次只有一個進程在執行鎖里面的程序,這一段程序對于所有寫上這個鎖的進程,大家都變成了串行

lock.acquire()print('%s: %s is running' %(n,os.getpid()))

time.sleep(1)print('%s:%s is done' %(n,os.getpid()))#解鎖,解鎖之后其他進程才能去執行自己的程序

lock.release()if __name__ == '__main__':

lock=Lock()for i in range(5):

p=Process(target=work,args=(i,lock))

p.start()

2. 信號量

Semaphore 內部維護了一個計數器, acquire-1,release + 1, 當計數器為0的時候

,阻塞其他的進程

1 互斥鎖同時只允許一個線程更改數據,而信號量Semaphore是同時允許一定數量的線程更改數據 。2 假設商場里有4個迷你唱吧,所以同時可以進去4個人,如果來了第五個人就要在外面等待,等到有人出來才能再進去玩。3 實現:4 信號量同步基于內部計數器,每調用一次acquire(),計數器減1;每調用一次release(),計數器加1.當計數器為0時,acquire()調用被阻塞。這是迪科斯徹(Dijkstra)信號量概念P()和V()的Python實現。信號量同步機制適用于訪問像服務器這樣的有限資源。5 信號量與進程池的概念很像,但是要區分開,信號量涉及到加鎖的概念

信號量

1 #semaphre 信號量 鎖 原理跟鎖差不多,但可以限制數量

2 importtime3 from multiprocessing importSemaphore,Process4

5 deffun(n,l):6 l.acquire()7 print('%s開始' %n)8 time.sleep(1)9 print('%s結束>>>' %n)10 time.sleep(1)11 l.release()12 if __name__ == '__main__':13 l = Semaphore(4)14 for i in range(10):15 p = Process(target=fun,args=(i,l))16 p.start()

View Code

3. 事件

e = Even(), 事件初始狀態為False, 當事件為False,e.wait()的地方會阻塞,e.set()

將e 的狀態改為

True,如果e的狀態為True,wait的地方就不等待了,不阻塞了,

e.clear() 將e的狀態改為False,

查看e的狀態: is_set,

1 #Event 事件

2

3 #from multiprocessing import Event

4 # 5 #e = Event() #有兩個狀態 默認TURE wait Fase

6 #print(1)

7 #print(e.is_set()) #查看當前狀態

8 #e.set() #設置狀態為TURE

9 #print(e.is_set())

10 #e.clear() #清空狀態, False

11 #print(e.is_set())

12 #13 #e.wait() #狀態為False 就會被阻塞

14 #print('結束')

三. 進程通信(IPC)

隊列 **************

隊列: 進程安全的,能夠保證數據安全,

Q = queue(4), 給隊列設定一個固定的長度, q.put(),

q.get(),q.get_nowait(),q.get(False),

Q.put() 在隊列滿了的時候會阻塞和q.get在隊列空了之后會阻塞

Q.put_nowait()

Q.full q.empty

#from multiprocessing import Queue#q = Queue(3)#q.put('灰機1號')#q.put('2')#q.put(3)#print(q.empty()) #判斷是否為空#print(q.qsize()) #返回多少個數量#print(q.get())#print(q.get())#print(q.get())## print(q.get()) # q為空時將會被阻塞*******

#print(q.full()) #判斷q已滿#print(q.get_nowait()) ##print(q.get_nowait()) ##print(q.get_nowait()) #

## print(q.get_nowait()) # q為空時報錯 queue.Empty*******#q.get(False) #同上 會報錯

1 #基于隊列的進程通信

2 #from multiprocessing import Process,Queue

3 #def fun(q):

4 #a = q.get()

5 #print('>>>>:', a)

6 #if __name__ == '__main__':

7 #q = Queue(9)

8 #q.put('奧術大師多')

9 #p = Process(target=fun,args=(q,))

10 #p.start()

11 #12 #print('主進程結束')

基于隊列的通信

#Queue#import time#from multiprocessing import Process,Queue#

#def shengchan(q):#for i in range(10):#time.sleep(1)#q.put('包子%s號' %i)#print('包子%s號生產完畢' %i)#q.put(None)#def xiaofei(q):#while 1:#time.sleep(1.5)#a = q.get()#if a == None:#break#print('%s被吃' %a)#

#if __name__ == '__main__':#q = Queue(10)#p1 = Process(target=shengchan,args=(q,))#p2 = Process(target=xiaofei,args=(q,))#p1.start()#p2.start()#print('結束')

生產者消費者模型

生產者消費者模型

緩沖區解耦的事情

Joinablequeue, 能記錄著你往隊列里面put的數據量

其他方法和queue 是一樣的,比queue多了兩個方法: q.task_done,q.join

1 #JoinableQueue

2 #import time

3 #from multiprocessing import Process,JoinableQueue

4 #5 #def shengchan(q):

6 #for i in range(10):

7 #time.sleep(1)

8 #q.put('包子%s號' %i)

9 #print('包子%s號生產完畢' %i)

10 #q.join()

11 #def xiaofei(q):

12 #while 1:

13 #time.sleep(1.5)

14 #a = q.get()

15 #print('%s被 吃' %a)

16 #q.task_done()

17 #18 #if __name__ == '__main__':

19 #q = JoinableQueue(10)

20 #p1 = Process(target=shengchan,args=(q,))

21 #p2 = Process(target=xiaofei,args=(q,))

22 #p2.daemon = True

23 #p1.start()

24 #p2.start()

25 #print('結束')

JoinableQueue隊列應用

總結

以上是生活随笔為你收集整理的python 队列 锁_python-day31(同步锁,队列)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男人的天堂欧美 | av一道本 | 在线观看欧美日韩 | 91美女片黄在线观看游戏 | 久久久久久久久久久综合 | 精品伦理一区二区 | 亚洲欧美网址 | 成人精品av | 99免费在线 | 国产这里只有精品 | 国产一级α片 | 欧美一区二区在线视频观看 | 91久久人澡人人添人人爽欧美 | 丝袜 亚洲 另类 国产 制服 | 四虎av影视 | 懂色av一区二区夜夜嗨 | 欧美性xxxxx极品少妇 | 精品人妻无码专区在线 | 中文字幕日韩欧美在线 | 国产日韩在线观看一区 | 综合激情婷婷 | 色91视频 | av漫画在线观看 | 岛国激情| 9i在线看片成人免费 | 欧美黑人一级爽快片淫片高清 | 青春草久久| 亚洲少妇30p | 色超碰| 欧美亚洲91 | 大度亲吻原声视频在线观看 | 欧洲亚洲激情 | 激情婷婷六月天 | 天堂在线一区 | 西西人体44www大胆无码 | 一级大毛片 | 色欲国产精品一区二区 | 久久免费播放 | 亚洲无套 | 久久av在线 | 精品国产欧美日韩 | 欧美性生活| 国产亚洲精 | 亚洲一区二区三区四区电影 | 成人视屏在线观看 | 一本一本久久a久久精品综合麻豆 | 一区二区在线观看免费视频 | 午夜影院久久 | 一色桃子juy758在线播放 | 国产www视频 | 性喷潮久久久久久久久 | 毛片内射久久久一区 | 日本久久久久 | 香蕉视频成人在线 | 久久夜色精品国产欧美乱 | 亚洲国产精彩视频 | 国产精品免费av一区二区三区 | 天堂在线中文字幕 | 免费看一级视频 | 国产毛片一区二区三区 | 日本老肥婆bbbwbbbwzr | 国产精品香蕉在线 | 51精品国产| 成人网在线免费观看 | а√天堂中文在线资源8 | 亚洲午夜av在线 | 青青草视频偷拍 | 四川丰满妇女毛片四川话 | 韩国三级丰满少妇高潮 | 美女福利在线 | 久久久亚洲国产精品 | 午夜剧场免费在线观看 | 中文字幕a√ | 黑丝美女啪啪 | 久久精品9| 我要看一级片 | 丰满的女邻居 | 亚洲精品aⅴ中文字幕乱码 国产精品调教视频 | 骚虎av在线 | 成人午夜激情影院 | 女尊高h男高潮呻吟 | 在线观看免费毛片 | 猫咪av在线 | 国产欧美日韩视频 | 成人在线视频一区二区 | 日韩第1页 | 欧美日韩美女 | 欧美一级夜夜爽 | 视频日韩 | 臭脚猛1s民工调教奴粗口视频 | 精品一区二区三区人妻 | 人人妻人人澡人人爽人人欧美一区 | 久伊人 | 久久影业 | 成人做爰免费视频免费看 | 91精品国产高潮对白 | 高清国产一区二区 | 欧美女同在线 | 少妇2做爰交换朴银狐 |