关于Python3.X线程中信号量的使用详解


本文摘自php中文网,作者黄舟,侵删。

信号量semaphore 是一个变量,控制着对公共资源或者临界区的访问。信号量维护着一个计数器,指定可同时访问资源或者进入临界区的线程数。下面这篇文章主要给大家介绍了关于Python3.X 线程中信号量的使用方法,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

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

方法示例

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

# -*- 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正则表达式中re模块的使用方法有哪些?re模块用法介绍

如何将字符串转成字典

Python集合有序吗

Python是什么软件下载

pandas groupby 分组取每组的前几行记录方法

Python破解字符串找茬游戏实现方法

Python中subprocess模块级方法的介绍(附代码)

Python中is和==有何区别?Python中is和==的区别介绍

Python用pip安装numpy

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...