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实现Windows定时关机功能
Mar 21 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
python mysql断开重连的实现方法
Jul 26 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 Python
Python的logging模块基本用法
Dec 24 Python
只用20行Python代码实现屏幕录制功能
Jun 02 Python
python turtle绘图命令及案例
Nov 23 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的面试题集
2006/11/19 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
取得父标签
2006/11/14 Javascript
网页javascript精华代码集
2007/01/24 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
python求最大值最小值方法总结
2019/06/25 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
Wiggle中国:英国骑行、跑步、游泳 & 铁三运动装备专卖网店
2016/08/02 全球购物
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
群胜软件Java笔试题
2012/09/29 面试题
学校门卫管理制度
2014/01/30 职场文书
九年级英语教学反思
2014/01/31 职场文书
文体活动总结
2015/02/04 职场文书