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获取元素在数组中索引号的方法
Jul 15 Python
Python random模块用法解析及简单示例
Dec 18 Python
python web基础之加载静态文件实例
Mar 20 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
python 移除字符串尾部的数字方法
Jul 17 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 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.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
php 方便水印和缩略图的图形类
2009/05/21 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
php绘制一个矩形的方法
2015/01/24 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
jquery 插件学习(一)
2012/08/06 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Python多线程实例教程
2014/09/06 Python
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
pycharm新建一个python工程步骤
2019/07/16 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
CSS3 简写animation
2012/05/10 HTML / CSS
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
公司应聘自荐书
2014/06/14 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫
Win10 Anaconda安装python-pcl
2022/04/29 Servers