• 进程同步控制-----锁、信号量、事件(四)


    #  信号量(相等于加锁,只不过里面有个计时器)

    # 多进程中的组件
    # ktv
    # 4个
    # 一套资源 同一时间 只能被n个人访问
    # 某一段代码 同一时间 只能被n个进程执行
    import time
    import random
    from multiprocessing import Process
    from multiprocessing import Semaphore

    # sem = Semaphore(4)
    # sem.acquire()
    # print('拿到第一把钥匙')
    # sem.acquire()
    # print('拿到第二把钥匙')
    # sem.acquire()
    # print('拿到第三把钥匙')
    # sem.acquire()
    # print('拿到第四把钥匙')
    # sem.acquire()
    # print('拿到第五把钥匙')
    def ktv(i,sem):
    sem.acquire() #获取钥匙
    print('%s走进ktv'%i)
    time.sleep(random.randint(1,5))
    print('%s走出ktv'%i)
    sem.release()


    if __name__ == '__main__' :
    sem = Semaphore(4) #4把钥匙
    for i in range(20):
    p = Process(target=ktv,args=(i,sem))
    p.start()

    # 事件

    # 通过一个信号 来控制 多个进程 同时 执行或者阻塞
    # 事件
    # from multiprocessing import Event
    # 一个信号可以使所有的进程都进入阻塞状态
    # 也可以控制所有的进程解除阻塞
    # 一个事件被创建之后,默认是阻塞状态
    # e = Event() # 创建了一个事件
    # print(e.is_set()) # 查看一个事件的状态,默认被设置成阻塞false
    # e.set() # 将这个事件的状态改为True
    # print(e.is_set())
    # e.wait() # 是依据e.is_set()的值来决定是否阻塞的
    # print(123456)
    # e.clear() # 将这个事件的状态改为False
    # print(e.is_set())
    # e.wait() # 等待 事件的信号被变成True
    # print('*'*10)


    # set 和 clear
    # 分别用来修改一个事件的状态 True或者False
    # is_set 用来查看一个事件的状态
    # wait 是依据事件的状态来决定自己是否在wait处阻塞
    # False阻塞 True不阻塞


    # 红绿灯事件
    import time
    import random
    from multiprocessing import Event,Process
    def cars(e,i):
    if not e.is_set():
    print('car%i在等待'%i)
    e.wait() # 阻塞 直到得到一个 事件状态变成 True 的信号
    print('33[0;32;40mcar%i通过33[0m' % i)

    def light(e):
    while True:
    if e.is_set():
    e.clear()
    print('33[31m红灯亮了33[0m')
    else:
    e.set()
    print('33[32m绿灯亮了33[0m')
    time.sleep(2)

    if __name__ == '__main__':
    e = Event()
    for i in range(20):
    car = Process(target=cars, args=(e,i))
    car.start()
    time.sleep(random.random())


















  • 相关阅读:
    python调用php函数
    api响应类
    php 利用socket发送GET,POST请求
    php的异常和处理
    predis操作大全
    PHP 实现HASH表
    PHP 实现Session入库/存入redis
    PHP下使用Redis消息队列发布微博
    jquery 仿163网易图片新闻幻灯片展示
    6种非常酷炫的jquery banner焦点图片幻灯片切换
  • 原文地址:https://www.cnblogs.com/mys6/p/10848383.html
Copyright © 2020-2023  润新知