信号量概念和锁其实是一样的。
假如一个资源(就是一段代码),我们不想让所有进程同时使用,只想让规定的几个进程同时使用。这是就相当于一间上锁的房子,门后有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()
这段代码就实现了信号量。