博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程中的信号量
阅读量:7065 次
发布时间:2019-06-28

本文共 1427 字,大约阅读时间需要 4 分钟。

# 多进程中的组件    # 信号量        # 举例说概念:现在有4个门,只能进4个人。一套资源同一时间只能被N个人访问。这里将N个人比作N个进程,一套资源这里比作代码            # 某一段代码 同一时间只能被N个进程执行        # 有一个房子,房子就是要保护的代码(限定进程访问的代码),房子只有一个门,门上有一串钥匙,有多少把钥匙是你规定的,此时当有一个进程来了,            # 这个进程拿一把钥匙然后开门进到了房子中,此时其他进程来了,都会拿钥匙进入到房子里,知道其他进程来时发现没有钥匙了就无法打开门进去了            # 只有当房子里的进程出来了,将钥匙又放到了门上,其他在房子门口等的进程中有一个进程就可以拿到这把钥匙进到屋里,这就是信号量的概念        # 同一段代码,只能被N个进程执行,当超过了N个进程要执行这段代码时,超过的进程需要等待前面的进程执行这段代码结束后,归还入口数,后面的进程才可以进入# import time# import random# from multiprocessing import Process## # 下面的例子,想要模拟一个现象是,比如ktv只有4个,一个ktv只能进去一个人(一个进程)。但是下面的例子实际上,20个进程一下子全部都进入到了ktv中# def ktv(i):#     print(' %s 走进ktv' % i)#     time.sleep(random.randint(1, 5))    # 模拟在ktv唱歌的时间#     print(' %s 走出ktv' % i)## if __name__ == '__main__':#     for i in range(20):#         p = Process(target=ktv, args=(i,))#         p.start()import timeimport randomfrom multiprocessing import Processfrom multiprocessing import Semaphore   # 导入进程的信号量模块# 下面的例子,想要模拟一个现象是,比如ktv只能进入4个人,同一时间只能有4个进程进去def ktv(i, sem):    sem.acquire()   # 拿钥匙,拿一个钥匙就会少一个钥匙,当拿到钥匙没有时,再进来的进程就会阻塞在这里,只有当前面拿钥匙的进程将钥匙归还,当前进程才能拿到钥匙向下执行    print(' %s 走进ktv' % i)    time.sleep(random.randint(1, 5))    # 模拟在ktv唱歌的时间    print(' %s 走出ktv' % i)    sem.release()   # 还钥匙if __name__ == '__main__':    sem = Semaphore(4)   # 实例化一个信号量,参数表示有几把钥匙,    for i in range(20):        p = Process(target=ktv, args=(i, sem))        p.start()

 

转载于:https://www.cnblogs.com/whylinux/p/9818879.html

你可能感兴趣的文章
TCP/IP中的四元组、五元组、七元组
查看>>
用代码告诉你“问世间情为何物,直教人生死相许”
查看>>
(PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
查看>>
使用sqlite保存数据返回主键
查看>>
js循环生成多个easyui datagrid数据网格时,初始化表格
查看>>
Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器...
查看>>
获取用户信息
查看>>
洛谷P3952 时间复杂度
查看>>
Leetcode | Parentheses 相关
查看>>
Ajax分页问题
查看>>
如何禁止内部viewPager滑动
查看>>
简单的转义字符
查看>>
RabbitMQ入门-Topic模式
查看>>
poj 2777 Count Color(线段树区间更新)
查看>>
Java数据结构与算法(5) - ch05链表(LinkList)
查看>>
CLR Via CSharp读书笔记(21):自动内存管理(垃圾回收)
查看>>
CentOS 6.5系统上安装SVN服务器端的方法及目录访问权限配置(转总结)
查看>>
MongoDB官方C#驱动中查询条件Query用法
查看>>
链表的销毁与清空(转)
查看>>
小议C#接口的隐式与显示实现
查看>>