Python线程的两种编程方式


Posted in Python onApril 14, 2015

Python中如果要使用线程的话,python的lib中提供了两种方式。一种是函数式,一种是用类来包装的线程对象。举两个简单的例子希望起到抛砖引玉的作用,关于多线程编程的其他知识例如互斥、信号量、临界区等请参考python的文档及相关资料。
1、调用thread模块中的start_new_thread()函数来产生新的线程,请看代码:

###        thread_example.py   

import time  

import thread  

def timer(no,interval):  #自己写的线程函数   

        while True:   

                print 'Thread :(%d) Time:%s'%(no,time.ctime())   

                time.sleep(interval)   

def test(): #使用thread.start_new_thread()来产生2个新的线程   

        thread.start_new_thread(timer,(1,1))     

        thread.start_new_thread(timer,(2,3))   

if __name__=='__main__':   

        test() 

这个是thread.start_new_thread(function,args[,kwargs])函数原型,其中function参数是你将要调用的线程函数;args是讲传递给你的线程函数的参数,他必须是个tuple类型;而kwargs是可选的参数。
线程的结束一般依靠线程函数的自然结束;也可以在线程函数中调用thread.exit(),他抛出SystemExit exception,达到退出线程的目的。
2、通过调用threading模块继承threading.Thread类来包装一个线程对象。请看代码:
import threading  

import time  

class timer(threading.Thread):     #我的timer类继承自threading.Thread类   

    def __init__(self,no,interval):    

        #在我重写__init__方法的时候要记得调用基类的__init__方法   

        threading.Thread.__init__(self)        

        self.no=no   

        self.interval=interval   

           

    def run(self):  #重写run()方法,把自己的线程函数的代码放到这里   

        while True:   

            print 'Thread Object (%d), Time:%s'%(self.no,time.ctime())   

            time.sleep(self.interval)   

               

def test():   

    threadone=timer(1,1)    #产生2个线程对象   

    threadtwo=timer(2,3)   

    threadone.start()   #通过调用线程对象的.start()方法来激活线程   

    threadtwo.start()   

       

if __name__=='__main__':   

    test()
 
其实thread和threading的模块中还包含了其他的很多关于多线程编程的东西,例如锁、定时器、获得激活线程列表等等,请大家仔细参考python的文档!
Python 相关文章推荐
详解Python中的type()方法的使用
May 21 Python
详解Swift中属性的声明与作用
Jun 30 Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
keras 读取多标签图像数据方式
Jun 12 Python
Python 实现定积分与二重定积分的操作
May 26 Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 #Python
利用Python中的输入和输出功能进行读取和写入的教程
Apr 14 #Python
对于Python编程中一些重用与缩减的建议
Apr 14 #Python
归纳整理Python中的控制流语句的知识点
Apr 14 #Python
Python中为什么要用self探讨
Apr 14 #Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 #Python
详解Python中for循环的使用
Apr 14 #Python
You might like
php中$this->含义分析
2009/11/29 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
Python中对列表排序实例
2015/01/04 Python
python数据结构之列表和元组的详解
2017/09/23 Python
git进行版本控制心得详谈
2017/12/10 Python
Python中拆分字符串的操作方法
2019/07/23 Python
python tornado使用流生成图片的例子
2019/11/18 Python
Python如何给你的程序做性能测试
2020/07/29 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
平面设计师工作职责范文
2013/12/03 职场文书
工作的心得体会
2013/12/31 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
代领报检证委托书范本
2014/10/11 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书