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获取指定路径下所有指定后缀文件的方法
May 26 Python
python安装Scrapy图文教程
Aug 14 Python
Python实现购物系统(示例讲解)
Sep 13 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
Python控制Firefox方法总结
Jun 03 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
django rest framework 过滤时间操作
Jul 12 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 分库分表hash算法
2009/11/12 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
JavaScript函数详解
2014/11/17 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
Python删除windows垃圾文件的方法
2015/07/14 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
python中PIL安装简单教程
2016/04/21 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
python3.7添加dlib模块的方法
2020/07/01 Python
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
运动会解说词50字
2014/01/18 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python
python可视化之颜色映射详解
2021/09/15 Python
Python字典的基础操作
2021/11/01 Python