标签分类
技术文章
当前位置:主页 > 计算机编程 > python > 关于Python3.X线程中信号量的使用详解

Python3.X线程中信号量的使用实例讲解

  • 发布时间:
  • 作者:码农之家原创
  • 点击:199

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

这篇文章主要知识点是关于Python3.X,使用,信号,关于Python3.X线程中信号量的使用详解,Python3.X 线程中信号量的使用方法示例 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python3网络爬虫开发实战
  • 类型:Python爬虫大小:375.5 MB格式:PDF出版:人民邮电出版社作者:崔庆才
立即下载

更多相关的学习资源可以参阅 程序设计电子书Python电子书、等栏目。

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

 

前言

最近在学习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线程中信号量的使用详解

总结

以上就是关于Python3.X线程中信号量的使用详解的详细内容,更多请关注码农之家其它相关文章!

Python3.X 线程中信号量的使用方法示例

前言

最近在学习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 线程中信号量的使用方法示例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对码农之家的支持。

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到解决axios.interceptors.respon、 vue项目中使用md5加密以及、 详解vue axios封装请求状态、 等python文章进一步学习,感谢大家的阅读和支持。

上一篇:Python基础学习需要掌握的知识点总结

下一篇:Python中线程的MQ消息队列实现及优缺点详解

展开 +

收起 -

学习笔记
网友NO.863110

对Python信号处理模块signal详解

Python中对信号处理的模块主要是使用signal模块,但signal主要是针对Unix系统,所以在Windows平台上Python不能很好的发挥信号处理的功能。 要查看Python中的信号量,可以使用dir(signal)来查看。 signal.signal() 在signal模块中,主要是使用signal.signal()函数来预设信号处理函数 singnal.signal(signalnum, handler) 其中第一个参数是信号量,第二个参数信号处理函数。 下面看个简单的例子,其中 定义了一个信号处理函数signal_handler(),用来处理程序接收到信号时执行的操作 一段循环等待发送信号 #!/usr/bin/env python# -*- coding: utf-8 -*-import signalimport timedef signal_handler(signum, frame): print('Received signal: ', signum)while True: signal.signal(signal.SIGHUP, signal_handler) # 1 signal.signal(signal.SIGINT, signal_handler) # 2 signal.signal(signal.SIGQUIT, signal_handler) # 3 signal.signal(signal.SIGALRM, signal_handler) # 14 signal.signal(signal.SIGTERM, signal_handler) # 15 signal.signal(signal.SIGCONT, signal_handler) # 18 while True: print('waiting') time.sleep(1) 运行上面的程序 python test.py 然后另外开一个终端,找到对应的进程,并执行下面的kill操作 kill -1 pidkill -2 pidkill -3 pidkill -14 pidkill -15 pidkill -18 pidkill -9 pid # 最后杀死进程 此时可以看到test.py的输出,打印的就是具体接收到的信号。 这里注意一点就是程序中注册了SIGINT信号,所以在运行程序后……

网友NO.283526

Python3.X 线程中信号量的使用方法示例

前言 最近在学习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 threadingimport timeimport randomsites = ["https://www.baidu.com/", "https://github.com/Fiz1994", "https://stackoverflow.com/", "https://www.sogou.com/", "http://english.sogou.com/?b_o_e=1fr=common_index_nav&query="] * 20sites_index = 0maxconnections = 2pool_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个爬虫是处于活动状态 总结 以上就是这篇文章……

网友NO.159353

python多线程下信号处理程序示例

本文实例为大家分享了python多线程下信号处理程序示例的具体代码,供大家参考,具体内容如下 下面是一个网上转载的实现思路,经过验证,发现是可行的,就记录下来。 思路 python多线程中要响应Ctrl+C的信号以杀死整个进程,需要: 1.把所有子线程设为Daemon; 2.使用isAlive()函数判断所有子线程是否完成,而不是在主线程中用join()函数等待完成; 3.写一个响应Ctrl+C信号的函数,修改全局变量,使得各子线程能够检测到,并正常退出。 源码 #!/usr/bin/env python#encoding: utf-8#filename: signal_demo.py import threading, signal def do_job(i, step): global exited idx = i while not exited: if(idx 10000000): print 'thread[%d]: idx=%d' % (i, idx) idx = idx + step else: break if exited: print 'receive a signal to exit, thread[%d] stop.' % i else: print 'thread[%d] complete.' % i def sig_handler(sig, frame): global exited exited = True print 'receive a signal %d, exited=%d' % (sig, exited) def main(): #set signal handler signal.signal(signal.SIGTERM, sig_handler) signal.signal(signal.SIGINT, sig_handler) pool = [] pool_size = 50 for i in range(pool_size): t = threading.Thread(target = do_job, args = (i, pool_size)) t.setDaemon(True) pool.append(t) t.start() while 1: alive = False for i in range(pool_size): alive = alive or pool[i].isAlive() if alive == True: break if not alive: break if __name__ == '__main__': exited = False main() 命令行运行……

网友NO.730889

基于matplotlib Python实现正弦信号的时域波形和频谱图示例

这篇文章主要介绍了Python实现正弦信号的时域波形和频谱图,涉及Python数学运算与图形绘制相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现正弦信号的时域波形和频谱图。分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*-# 正弦信号的时域波形与频谱图import numpy as npimport matplotlib.pyplot as plimport matplotlibimport mathimport randomrow = 4col = 4N = 500fs = 5n = [2*math.pi*fs*t/N for t in range(N)] # 生成了500个介于0.0-31.35之间的点# print naxis_x = np.linspace(0,3,num=N)#频率为5Hz的正弦信号x = [math.sin(i) for i in n]pl.subplot(221)pl.plot(axis_x,x)pl.title(u'5Hz的正弦信号',fontproperties='SimHei')pl.axis('tight')#频率为5Hz、幅值为3的正弦+噪声x1 = [random.gauss(0,0.5) for i in range(N)]xx = []#有没有直接两个列表对应项相加的方式??for i in range(len(x)): xx.append(x[i]*3 + x1[i])pl.subplot(222)pl.plot(axis_x,xx)pl.title(u'频率为5Hz、幅值为3的正弦+噪声',fontproperties='SimHei')pl.axis('tight')#频谱绘制xf = np.fft.fft(x)xf_abs = np.fft.fftshift(abs(xf))axis_xf = np.linspace(-N/2,N/2-1,num=N)pl.subplot(223)pl.title(u'频率为5Hz的正弦频谱图',fontproperties='SimHei')pl.plot(axis_xf,xf_abs)pl.axis('tight')#频谱绘制xf = np.fft.fft(xx)xf_abs = np.fft.fftshift(abs(xf))pl.subplot(224)pl.title(u'频率为5Hz的正弦频谱图',fontproperties='SimHei')pl.plot(axis_xf,xf_abs)pl.axis('tight')pl.show(……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明