激情久久久_欧美视频区_成人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

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: av成人在线免费观看 | 一边吃奶一边插下面 | 国产xxxxx在线观看 | 一区二区三区在线观看视频 | 国产合集91合集久久日 | 亚洲一区二区在线视频 | 49vvv| 国产在线播放一区二区 | 狠狠操夜夜爱 | 成人国产在线视频 | 成人午夜高清 | 中文字幕 在线观看 | 男男羞羞视频网站国产 | 亚洲成人在线视频网站 | 国产精品久久久久久久午夜片 | 嫩呦国产一区二区三区av | 亚洲生活片 | 性片网站 | 精品国产一级毛片 | 精品一区二区三区在线观看视频 | 久久久久久久久久久久网站 | 91在线播放国产 | 欧美国产永久免费看片 | 在线播放亚洲 | 国产肥熟 | 国产免费一区二区三区最新不卡 | 97香蕉超级碰碰久久免费软件 | 毛片久久 | 中文字幕一区在线观看视频 | 免费看成人毛片 | 成人三级在线播放 | 9999久久| 国产91精品亚洲精品日韩已满 | 国产一区二区三区在线视频 | 成年人视频在线免费观看 | 一级小毛片 | 久久av一区二区 | 黄色特级一级片 | 在线免费日韩 | 特片网久久 | 免费观看视频在线 |