一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 女娃开嫩苞经历小说 | 国产va免费精品高清在线观看 | 四虎国产精品视频免费看 | 日本不卡免费新一二三区 | 国内精品国语自产拍在线观看55 | 男女羞羞的视频 | 日韩高清一区 | 亚洲国产精品牛在线 | 性白俄罗斯高清xxxxx | 国产精品1| 亚洲色图欧美色 | 9总探花新品牛仔背带裤 | 国产午夜亚洲精品不卡 | 国内小情侣一二三区在线视频 | 欧美国产在线视频 | 千金在线观看 | 天天综合天天综合 | 精品手机在线视频 | 亚洲高清影院 | 天天碰夜夜操 | 草莓视频旧版 | 男人扒开女人下身添 | 91人人在线 | 国内剧情麻豆 | 九九99九九精彩 | 亚洲国产精品无码中文字幕 | 人人艹在线视频 | 精品久久香蕉国产线看观看亚洲 | 国产精品久久久久影院色老大 | 无码乱人伦一区二区亚洲 | 猫咪社区免费资源在线观看 | 第一福利在线导航 | 成人性爱视频在线观看 | 精品亚洲综合久久中文字幕 | 男女性刺激爽爽免费视频 | 91精品天美精东蜜桃传媒免费 | 国产欧美一区二区成人影院 | 男人搡女人视频免费看 | 水岛津实在线 | 丝袜足控免费网站xx动漫漫画 | 国产午夜精品一区二区三区 |