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装饰器decorator介绍
Nov 21 Python
python3.5仿微软计算器程序
Mar 30 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
Python hashlib模块用法实例分析
Jun 12 Python
python实现归并排序算法
Nov 22 Python
Python设计模式之原型模式实例详解
Jan 18 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
python中如何写类
Jun 29 Python
Python常用模块函数代码汇总解析
Aug 31 Python
python数字类型和占位符详情
Mar 13 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
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
javascript中的几个运算符
2007/06/29 Javascript
javascript indexOf函数使用说明
2008/07/03 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
python通过加号运算符操作列表的方法
2015/07/28 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python实现用户管理系统
2018/01/10 Python
Python退火算法在高次方程的应用
2018/07/26 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
深入了解Python 方法之类方法 & 静态方法
2020/08/17 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
车间副主任岗位职责
2013/12/24 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
创新社会管理心得体会
2014/09/12 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
小学生安全教育广播稿
2014/10/20 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
python之基数排序的实现
2021/07/26 Python