zoukankan      html  css  js  c++  java
  • 信号量Semaphore

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

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

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

  • 相关阅读:
    springboot2 整合redis
    springboot2 整合mongodb
    Springboot2 Vue 前后端分离 整合打包 docker镜像
    nginx常见问题总结
    nginx配置中root和alias的区别
    nginx高级用法
    nginx搭建代理服务器与负载均衡器
    nginx常规扩展功能
    nginx典型官方模块解释
    nginx默认配置文件解释
  • 原文地址:https://www.cnblogs.com/aaronthon/p/9825867.html
Copyright © 2011-2022 走看看