最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 14:40:46
文檔

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

Python多進程同步Lock、Semaphore、Event實例:同步的方法基本與多線程相同。 1) Lock 當多個進程需要訪問共享資源的時候,Lock可以用來避免訪問的沖突。 代碼如下: import multiprocessing import sys def worker_with(lock, f): with lock: fs = open(f,a+) fs.
推薦度:
導讀Python多進程同步Lock、Semaphore、Event實例:同步的方法基本與多線程相同。 1) Lock 當多個進程需要訪問共享資源的時候,Lock可以用來避免訪問的沖突。 代碼如下: import multiprocessing import sys def worker_with(lock, f): with lock: fs = open(f,a+) fs.

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

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

Python多進程同步Lock、Semaphore、Event實例:同步的方法基本與多線程相同。 1) Lock 當多個進程需要訪問共享資源的時候,Lock可以用來避免訪問的沖突。 代碼如下: import multiprocessing import sys def worker_with(lock, f): with lock: fs = open(f,a+) fs.
推薦度:
標簽: 同步 例子 event
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top