前言
最近在学习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://*.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个爬虫是处于活动状态
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:https://segmentfault.com/a/1190000010314270