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求斐波那契数列示例分享
Feb 14 Python
python文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
Python中的getopt函数使用详解
Jul 28 Python
Python中字典(dict)合并的四种方法总结
Aug 10 Python
Python logging管理不同级别log打印和存储实例
Jan 19 Python
Django 重写用户模型的实现
Jul 29 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
python如何写try语句
Jul 14 Python
浅析python中的del用法
Sep 02 Python
Python之字典对象的几种创建方法
Sep 30 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 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页面运行时间的函数介绍
2013/07/01 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
thinkphp3.2实现上传图片的控制器方法
2016/04/28 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
newxtree.js代码
2007/03/13 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
理解Python垃圾回收机制
2016/02/12 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
python sqlite的Row对象操作示例
2019/09/11 Python
python常用排序算法的实现代码
2019/11/08 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
在Python中实现字典反转案例
2020/12/05 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
营销与策划个人求职信
2013/09/22 职场文书
七年级音乐教学反思
2014/01/26 职场文书
学生安全承诺书
2014/05/22 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS