Python3.X 线程中信号量的使用方法示例


Posted in Python onJuly 24, 2017

前言

最近在学习python,发现了解线程信号量的基础知识,对深入理解python的线程会大有帮助。所以本文将给大家介绍Python3.X线程中信号量的使用方法,下面话不多说,来一起看看详细的介绍:

方法示例

线程中,信号量主要是用来维持有限的资源,使得在一定时间使用该资源的线程只有指定的数量

# -*- coding:utf-8 -*-
""" Created by FizLin on 2017/07/23/-下午10:59
 mail: https://github.com/Fiz1994
 信号量

 maxconnections = 5
...
pool_sema = BoundedSemaphore(value=maxconnections)
Once spawned, worker threads call the semaphore's acquire and release methods when they need to connect to the server:

pool_sema.acquire()
conn = connectdb()
... use connection ...
conn.close()
pool_sema.release()


"""
import threading
import time
import random

sites = ["https://www.baidu.com/", "https://github.com/Fiz1994", "https://stackoverflow.com/",
   "https://www.sogou.com/",
   "http://english.sogou.com/?b_o_e=1&ie=utf8&fr=common_index_nav&query="] * 20
sites_index = 0
maxconnections = 2
pool_sema = threading.BoundedSemaphore(value=maxconnections)


def test():
 with pool_sema:
  global sites_index, sites
  url = str(sites[sites_index])
  k = random.randint(10, 20)
  print("爬去: " + url + " 需要时间 : " + str(k))
  sites_index += 1
  # print(url)
  time.sleep(k)
  print('退出 ', url)


for i in range(100):
 threading.Thread(target=test).start()

可以发现该程序中,永远只有2个爬虫是处于活动状态

Python3.X 线程中信号量的使用方法示例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python实现bucket排序算法实例分析
May 04 Python
python 换位密码算法的实例详解
Jul 19 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Python基础教程之利用期物处理并发
Mar 29 Python
pandas 获取季度,月度,年度首尾日期的方法
Apr 11 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
python range()函数取反序遍历sequence的方法
Jun 25 Python
浅谈Django的缓存机制
Aug 23 Python
Python中一些深不见底的“坑”
Jun 12 Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 #Python
老生常谈进程线程协程那些事儿
Jul 24 #Python
Django模板变量如何传递给外部js调用的方法小结
Jul 24 #Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 #Python
apache部署python程序出现503错误的解决方法
Jul 24 #Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 #Python
Python实现购物程序思路及代码
Jul 24 #Python
You might like
PHP面向对象编程快速入门
2006/10/09 PHP
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
php静态文件生成类实例分析
2015/01/03 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
php fread函数使用方法总结
2019/05/28 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
angularJS 入门基础
2015/02/09 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python while循环使用else语句代码实例
2020/02/07 Python
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
linux比较文件内容的命令是什么
2015/09/23 面试题
竞聘上岗演讲稿范文
2014/01/10 职场文书
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
公司合作协议书范本
2014/04/18 职场文书
教师个人考察材料
2014/12/16 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
Python中itertools库的四个函数介绍
2022/04/06 Python