1。说点题外话吧。记得刚毕业的时候,总喜欢研究其他各种新技术的东西。可能我今天还在做hadoopdistribution,明天准备去了解python的机器学习。慢慢的学会了很多东西,除了java,对scala、C#、python、shell等也算是一知半解了,但是我真的很难写出东西放到生产环境或者作为正式的项目说实话。其实编程3年了,感觉技术的深度比宽度更重要,所以现在主要写一些java和python相关的东西,不打算接触其他语言。2、我每天都在接触多线程。现在很多项目中的多线程都是通过容器或者中间件来完成的。比如最常见的就是web项目容器。从web-2.0开始,很多项目都从其他地方搬到了web服务器上,使用浏览器就可以轻松访问。对多线程的支持基本封装在web容器中,nginx服务是面向进程设计的。它们以用户请求为导向,使用中间件将它们划分为多线程请求模式。除了架构或者运维人员会关注这些,其他开发人员在繁重的开发任务面前怎么可能关注这些。所以,面对这种情况,如果不是在日常开发中积极研究,是不会要求自己去写一个多线程、高并发的需求的。3、在讲解python多线程之前,先复习一下理论知识,搞清楚什么是线程,需要注意什么。多线程:理论上可以在同一时间段执行多个程序片段,每个程序片段看做一个线程。为什么理论上这么说呢,因为实际的时间段在操作系统中基本是不存在的,但是在软件编程中我们可以理解为是在同一时间段执行的。同步:当多个线程同时执行到一个对象节点时,同时执行会导致对象冲突。因此,当一个线程在这里执行时,其他线程也需要处理该对象时需要等待。这称为同步。否则,它被称为异步。通常,在遇到需要同步的情况时,不同的编程语言都会选择通过加锁来实现同步,python也是如此。python语言中提供了两个与多线程相关的模块,一个是thread模块,一个是threading模块。与threading模块相比,thread模块提供的函数和功能相对较少。它只提供低级线程和一个简单的同步锁,而threading模块有更多处理多线程的功能。4.线程模块如何实现多线程创建使用线程1#导入线程模块2importthread3#创建并使用新线程4thread.start_new_thread(func,args[,kwargs])5#参数介绍6func--函数到由线程执行7args--传递给线程的参数必须是元组类型8kwargs--可选参数线程同步1#导入线程模块2导入线程3#分配锁对象4lock_=thread.allocate_lock()5#获取锁对象6lock_.acquire()7#释放锁对象8lock_.release()9#查看锁状态10lock_.locked()实例1#导入线程模块2导入线程3导入时间456#定义线程函数7deftime_run(thread_name,sleep_time,lock_obj):8print"加锁"9lock_obj.acquire()10print"当前线程名:",thread_name11print"等待时间:",sleep_time12time.sleep(sleep_time)13print"释放锁"14lock_obj.release()151617if__name__=='__main__':18lock_=thread.allocate_lock()19foriinrange(3):20thread.start_new_thread(time_run,('thread_'+str(i),int(i)*3,lock_))5、线程模块如何实现多线程创建,使用线程1#importthreadingmodule2importthreading3importtime4#threading模块提供了一个比较强大的线程类Thread,实现线程的独立管理5#通过继承Thread类实现自定义线程类67#创建自定义线程类8classCust_thread(threading.Thread):9????#?初始化线程实例10????def?__init__(self,thread_id,thread_name,sleep_time):11????????#?初始化12????????threading.Thread.__init__(self)13????????#?属性赋值14????????self.thread_id?=?thread_id15????????self.thread_name=thread_name16self.sleep_time=sleep_time1718#线程函数19defrun(self):20print"Createcurrentthread:",self.thread_name21print"Waittime:",self.sleep_time22threadtimelf.sleep_3sleep(seExample24thread_1=cust_thread(0,"thread_1",3)25thread_2=cust_thread(1,"thread_2",5)线程同步1#导入线程模块2导入线程3#线程模块使用Lock()函数提供锁支持4#获取锁对象5lock_=threading.Lock()6#添加锁7lock_.acquire()8#释放锁9lock_.release()除了使用锁来实现线程同步外,还可以使用python模块中的队列来实现对线程同步的控制Example1#-*-coding:UTF-8-*-23#导入threading模块4importthreading5importtime6#threading模块提供了一个比较强大的线程类Thread实现线程的独立管理7#通过继承Thread类实现自定义线程类89#创建自定义线程类10classcust_thread(threading.Thread):11#初始化线程实例12def__init__(self,thread_id,thread_name,sleep_time,lock_obj):13#初始化14threading.Thread.__init__(self)15#16self.thread_id=thread_id17self.thread_name=thread_name18self.sleep_time=sleep_time=sleep_time19self.lock_obj=lock_obj2021#22defRun(self):",self.thread_name25print"等待时间:",self.sleep_time26time.sleep(self.sleep_time)27self.lock_obj.release()282930if__name__=='__main__':31lock_obj=threading.Lock()32thread_1=cust_thread(0,"thread_1",3,lock_obj)33三ad_2=cust_thread(1,"thread_2",5,lock_obj)34#启动线程35thread_1.start()36thread_2.start()37#守护线程被执行38thread_1.join()39thread_2.join()40print"完成所有线程执行"更多精彩前往微信公众号【Python集中营】,关注获取《python 从入门到精通全套视频》
