线程、锁、递归锁、信号量
2018-06-18 02:02:47来源:未知 阅读 ()
线程的直接调用:
import threading #直接调用 def run2(n): #函数名可以随便起 n = '吞噬者' print('rhread %s is start'% n) t = threading.Thread(target=run2,args='n') #生成一个线程实例 t.start()
线程的继承式调用:
import threading #继承式调用 class Mythreading(threading.Thread): def __init__(self,n): super(Mythreading,self).__init__() #重写构造方法,继承基类 self.n = n def run(self): #函数名必须是 run print('线程 %s 已启动' % self.n) t = Mythreading('吞噬者') t.run()
锁:
import threading,time number = 0 def run2(n): #定义每个线程要运行的函数 lock.acquire() #在修改数据之前加锁,加锁之后,程序立刻变成串行 global number number += 1 time.sleep(1) lock.release() #修改结束释放锁 以此来避免重复修改数据(这种情况只会在2.x中出现,3.xzhong1不会重复修改,可以理解为3.x自己将这一块儿优化了,但是还是得加锁) print('线程启动:',n,threading.current_thread(),threading.active_count()) #threading.current_thread()显示线程类型,是主线程还是子线程 #threading.active_count() 显示当前活跃的线程数 print('线程执行结束') lock = threading.Lock() #申请一把锁 t_objs = [] #用来存线程实例 std = time.time() for i in range(100): t = threading.Thread(target=run2,args=('t - %s' % i,)) # t.setDaemon(True) #将当前线程变成守护线程 t.start() t_objs.append(t) #为了不阻塞后面线程的启动,不在这儿join(等待),先放在一个列表里 for a in t_objs: #循环线程实例列表,等待所有线程执行完毕 a.join() #等待 print(time.time() - std) print('num:',number) print('全部结束了',threading.current_thread(),threading.active_count())
信号量:
#Author:SS import threading,time #每次最多5个线程同时运行 def run(n): semaphore.acquire() #加信号量 time.sleep(1) print('run the thread: %s\n' % n) semaphore.release() #释放 semaphore = threading.BoundedSemaphore(5) #申请信号量 最多允许5个线程同时运行 for i in range(20): t = threading.Thread(target=run,args=(i,)) t.start() while threading.active_count() != 1: pass else: print('线程全部结束!')
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Python连载30-多线程之进程&线程&线程使用 2019-08-13
- python多线程同步实例分析 2019-08-13
- python 之 并发编程(线程理论,开启线程的两种方式,进程 2019-07-24
- Python Threading 线程/互斥锁/死锁/GIL锁 2019-07-24
- concurrent.futures模块简单介绍(线程池,进程池) 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash