国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python多進程同步Lock、Semaphore、Event實例

Python多進程同步Lock、Semaphore、Event實例

2020-05-14 09:34腳本之家 Python

這篇文章主要介紹了Python多進程同步Lock、Semaphore、Event實例,Lock用來避免訪問沖突、Semaphore用來控制對共享資源的訪問數量、Event用來實現進程間同步通信,需要的朋友可以參考下

同步的方法基本與多線程相同。

1) Lock

當多個進程需要訪問共享資源的時候,Lock可以用來避免訪問的沖突。

復制代碼 代碼如下:


import multiprocessing
import sys

 

def worker_with(lock, f):
    with lock:
        fs = open(f,"a+")
        fs.write('Lock acquired via with\n')
        fs.close()
       
def worker_no_with(lock, f):
    lock.acquire()
    try:
        fs = open(f,"a+")
        fs.write('Lock acquired directly\n')
        fs.close()
    finally:
        lock.release()

if __name__ == "__main__":

    f = "file.txt"
 
    lock = multiprocessing.Lock()
    w = multiprocessing.Process(target=worker_with, args=(lock, f))
    nw = multiprocessing.Process(target=worker_no_with, args=(lock, f))

    w.start()
    nw.start()

    w.join()
    nw.join()

 

在上面的例子中,如果兩個進程沒有使用lock來同步,則他們對同一個文件的寫操作可能會出現混亂。

2)Semaphore

Semaphore用來控制對共享資源的訪問數量,例如池的最大連接數。

 

復制代碼 代碼如下:


import multiprocessing
import time

 

def worker(s,i):
    s.acquire()
    print(multiprocessing.current_process().name + " acquire")
    time.sleep(i)
    print(multiprocessing.current_process().name + " release")
    s.release()

if __name__ == "__main__":
 
    s = multiprocessing.Semaphore(2)
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(s,i*2))
        p.start()

 

上面的實例中使用semaphore限制了最多有2個進程同時執行。

3)Event

Event用來實現進程間同步通信。

 

復制代碼 代碼如下:


import multiprocessing
import time

 

def wait_for_event(e):
    """Wait for the event to be set before doing anything"""
    print ('wait_for_event: starting')
    e.wait()
    print ('wait_for_event: e.is_set()->' + str(e.is_set()))

def wait_for_event_timeout(e, t):
    """Wait t seconds and then timeout"""
    print ('wait_for_event_timeout: starting')
    e.wait(t)
    print ('wait_for_event_timeout: e.is_set()->' + str(e.is_set()))


if __name__ == '__main__':
    e = multiprocessing.Event()
    w1 = multiprocessing.Process(name='block',
                                 target=wait_for_event,
                                 args=(e,))
    w1.start()

    w2 = multiprocessing.Process(name='non-block',
                                 target=wait_for_event_timeout,
                                 args=(e, 2))
    w2.start()

    time.sleep(3)
    e.set()
    print ('main: event is set')
   
#the output is:
#wait_for_event_timeout: starting
#wait_for_event: starting
#wait_for_event_timeout: e.is_set()->False
#main: event is set
#wait_for_event: e.is_set()->True

 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人免费在线观看网址 | 亚洲欧美一区二区三区国产精品 | 自拍视频网站 | 久久精品中文 | 免费观看a视频 | 免费日韩成人 | 激情视频网站 | 精品一级| 欧美视频在线免费 | 免费观看h片 | 黄色影院 | 天天色天天射天天操 | 久久精品国产亚洲精品 | 北条麻妃99精品青青久久主播 | 精品亚洲一区二区三区 | 毛片一级av | 性欧美精品久久久久久久 | 久久精品xx老女人老配少 | 香蕉av777xxx色综合一区 | 久久伊人色 | 欧美精品在线一区二区三区 | 老司机午夜影院 | 欧美一级视频 | 国产视频网 | 91精品国产综合久久久久久丝袜 | 美女久久| 亚洲精品久久久久久久久久久久久 | 午夜视频网| 我要看日本黄色小视频 | 欧美性福 | 欧美激情国产精品 | 阿v视频在线观看 | 国产精品乱码一区二区三区 | 美女久久 | jizz中国zz女人18高潮 | 黄片毛片在线观看 | 日本精品一区二 | 大香一网 | 久久久一 | 欧美自拍一区 | 国产视频一区二区 |