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的Django框架使用的一些实用建议
Apr 03 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
点球小游戏python脚本
May 22 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
django 解决扩展自带User表遇到的问题
May 14 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
python面向对象版学生信息管理系统
Jun 24 Python
Python各协议下socket黏包问题原理
Apr 12 Python
Python实现仓库管理系统
May 30 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
星际流派综述
2020/03/04 星际争霸
PHP脚本的10个技巧(3)
2006/10/09 PHP
php格式化金额函数分享
2015/02/02 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
Python 异常处理实例详解
2014/03/12 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
python绘制中国大陆人口热力图
2018/11/07 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
如何基于线程池提升request模块效率
2020/04/18 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
python re模块常见用法例举
2021/03/01 Python
英国医生在线预约:Top Doctors
2019/10/30 全球购物
学生党员思想汇报范文
2014/01/09 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
2014年化验员工作总结
2014/11/18 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
python基础入门之字典和集合
2021/06/13 Python
Python数据处理的三个实用技巧分享
2022/04/01 Python
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js