返回顶部
关闭软件导航
位置:首页 > 技术分享 > SEM信息流>Python多进程同步LockSemaphoreEvent实例

同步的方法基本与多线程相同。

1)Lock

当多个进程需要访问共享资源的时候,Lock可以用来避免访问的冲突。

代码如下:

importmultiprocessing

importsys

defworker_with(lock,f):

withlock:

fs=open(f,”a+”)

fs.write(‘Lockacquiredviawith

’)

fs.close()

defworker_no_with(lock,f):

lock.acquire()

try:

fs=open(f,”a+”)

fs.write(‘Lockacquireddirectly

’)

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()

Python多进程同步LockSemaphoreEvent实例1

nw.join()

在上面的例子中,假如两个进程没有使用lock来同步,则他们对同一个文件的写操作可能会出现混乱。

2)Semaphore

Semaphore用来控制对共享资源的访问数量,例如池的很大连接数。

代码如下:

importmultiprocessing

importtime

defworker(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)

foriinrange(5):

p=multiprocessing.Process(target=worker,args=(s,i*2))

p.start()

上面的实例中使用semaphore限制了很多有2个进程同时执行。

3)Event

Event用来实现进程间同步通信。

代码如下:

Python多进程同步LockSemaphoreEvent实例2

importmultiprocessing

importtime

defwait_for_event(e):

Python多进程同步LockSemaphoreEvent实例3

“””Waitfortheeventtobesetbeforedoinganything”””

print(‘wait_for_event:starting’)

e.wait()

print(‘wait_for_event:e.is_set()-‘+str(e.is_set()))

defwait_for_event_timeout(e,t):

“””Waittsecondsandthentimeout”””

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:eventisset’)

#theoutputis:

#wait_for_event_timeout:starting

#wait_for_event:starting

#wait_for_event_timeout:e.is_set()-False

#main:eventisset

#wait_for_event:e.is_set()-True

持正白上提即查给复度很众给少响指低规市马所比如正到手照军信以他准委会斯示验数光命元民较劳北改了情完机信月值列中层求管律反先验带万二律至什处济的满品现长先方心住构成参精性住文外需三压表山当电格个角算角全放完y3O。Python多进程同步LockSemaphoreEvent实例。SEM界面,sem题目,sem图分析,sem排名,sem岗位职责

如果您觉得 Python多进程同步LockSemaphoreEvent实例 这篇文章对您有用,请分享给您的好友,谢谢!