0
点赞
收藏
分享

微信扫一扫

信号量Semaphore

捌柒陆壹 2022-08-22 阅读 80

信号量概念和锁其实是一样的。

假如一个资源(就是一段代码),我们不想让所有进程同时使用,只想让规定的几个进程同时使用。这是就相当于一间上锁的房子,门后有4把钥匙,哪个进程拿到钥匙开锁才能进门,拿不到要是的进程就等着进去的进程出来还钥匙。这就是信号量的概念。

信号量:一段代码,同一时间只能被N个进程使用。

代码如下:

import time
import random
from multiprocessing import Process

def func(i):

print('%s号进来'%i)
time.sleep(random.randint(1,3))
print(('%s号出去'%i))

if __name__ == "__main__":
for i in range(20):
p = Process(target=func, args=(i,))
p.start()

这段代码你会发现,进程同时进来。

加信号量改进:

import time
import random
from multiprocessing import Process
from multiprocessing import Semaphore

def func(i, sem):
sem.acquire()
print('%s号进来'%i)
time.sleep(random.randint(1,3))
print(('%s号出去'%i))
sem.release()

if __name__ == "__main__":
sem = Semaphore(4)
for i in range(20):
p = Process(target=func, args=(i, sem))
p.start()

这段代码就实现了信号量。

 



举报

相关推荐

0 条评论