zoukankan      html  css  js  c++  java
  • day48-线程-信号量

    #1、信号量,用来保证多个线程不会互相冲突。
    
    #2、迷你唱吧:每次只能有两人在里面唱k:
    from threading import Thread
    from threading import Semaphore
    import time
    import random
    def sing(i,sem):
        sem.acquire()
        print('%s拿到钥匙进入房间唱K'%i)
        time.sleep(random.randint(3,6)) #睡眠是为了看效果
        print('%s从房间出来了'%i)
        sem.release()
    
    sem = Semaphore(2) #有两把钥匙,受到钥匙的限制,5个线程不能同时执行,同一时间只能有2个线程在执行,其他在等着。
    for i in range(5): #5人唱k,5个任务,开启5个线程。
        t = Thread(target=sing,args=(i,sem))
        t.start()
    # 0拿到钥匙进入房间唱K
    # 1拿到钥匙进入房间唱K
    # 1从房间出来了
    # 2拿到钥匙进入房间唱K
    # 0从房间出来了
    # 3拿到钥匙进入房间唱K
    # 3从房间出来了
    # 4拿到钥匙进入房间唱K
    # 2从房间出来了
    # 4从房间出来了
    
    #3、信号量和线程池的区别:
    #    1.信号量:有几个任务就开几个线程,因为受到锁的限制,线程(任务)不能同时执行。
    #             例如有两把锁执行5个线程(任务),每次只能有两个线程(任务)在执行,其他在等待。
    #      线程池:可以设置线程的数量去轮流执行它的任务:例如设置2个线程去轮流执行5个任务。
    #              每次只能有两个任务在执行,其他在等待。
  • 相关阅读:
    Window_Open详解
    ajax josn 城市
    图片在容器里垂直居中
    Asp.Net 分段,断点,下载
    HTTP Range
    看得懂的看
    反射访问非公共成员
    C# Rijndael 大文件 分割/合并 并 加密
    在存储过程中如何实现将id列表字符串传入in()
    《植物大战僵尸》网页脚本版
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12142781.html
Copyright © 2011-2022 走看看