欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2014年11月21日 09:37:23   投稿:junjie  
這篇文章主要介紹了Python多進程同步Lock、Semaphore、Event實例,Lock用來避免訪問沖突、Semaphore用來控制對共享資源的訪問數(shù)量、Event用來實現(xiàn)進程間同步通信,需要的朋友可以參考下

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

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來同步,則他們對同一個文件的寫操作可能會出現(xiàn)混亂。

2)Semaphore

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

復制代碼 代碼如下:

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個進程同時執(zhí)行。

3)Event

Event用來實現(xiàn)進程間同步通信。

復制代碼 代碼如下:

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

相關文章

  • 解決pytorch load huge dataset(大數(shù)據(jù)加載)

    解決pytorch load huge dataset(大數(shù)據(jù)加載)

    這篇文章主要介紹了解決pytorch load huge dataset(大數(shù)據(jù)加載)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python多線程實現(xiàn)模擬火車站售票

    Python多線程實現(xiàn)模擬火車站售票

    這篇文章主要為大家詳細介紹了Python多線程實現(xiàn)模擬火車站售票,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python竟能畫這么漂亮的花,帥呆了(代碼分享)

    Python竟能畫這么漂亮的花,帥呆了(代碼分享)

    這篇文章主要介紹了用Python作圖的一個簡單實例,通過turtle模塊實現(xiàn)作圖,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Python中可變變量與不可變變量詳解

    Python中可變變量與不可變變量詳解

    這篇文章主要介紹了Python中可變變量與不可變變量,但Python中沒有指針和引用的概念,導致很多時候參數(shù)的傳遞和調用的時候會產生疑問:我到底是復制了一份新的做操作還是在它指向的內存操作?下面我們就帶著疑問去閱讀下面文章內容吧
    2021-10-10
  • python實戰(zhàn)教程之自動掃雷

    python實戰(zhàn)教程之自動掃雷

    用python實現(xiàn)掃雷,非常有意思,這篇文章主要給大家介紹了關于python實現(xiàn)自動掃雷的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • 使用python獲取郵箱郵件的設置方法

    使用python獲取郵箱郵件的設置方法

    這篇文章主要介紹了使用python獲取郵箱郵件的設置方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • python解析發(fā)往本機的數(shù)據(jù)包示例 (解析數(shù)據(jù)包)

    python解析發(fā)往本機的數(shù)據(jù)包示例 (解析數(shù)據(jù)包)

    這篇文章主要介紹了使用python解析獲取發(fā)往本機的數(shù)據(jù)包,并打印出來, 大家參考使用吧
    2014-01-01
  • 基于Django集成CAS實現(xiàn)流程詳解

    基于Django集成CAS實現(xiàn)流程詳解

    這篇文章主要介紹了基于Django集成CAS實現(xiàn)流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Python機器學習多層感知機原理解析

    Python機器學習多層感知機原理解析

    最簡單的深度網(wǎng)絡稱為多層感知機,它們由多層神經(jīng)元組成,每一層都與下面一層(從中接收輸入)和上面一層(反過來影響當前層的神經(jīng)元)完全相連
    2021-10-10
  • python入門課程第二講之怎么運行Python

    python入門課程第二講之怎么運行Python

    這篇文章主要介紹了python入門課程第二講之怎么運行Python,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論