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 ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python运用于数据分析的简单教程
Mar 27 Python
Python下载指定页面上图片的方法
May 12 Python
Python for循环生成列表的实例
Jun 15 Python
详解关于Django中ORM数据库迁移的配置
Oct 08 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
了解一下python内建模块collections
Sep 07 Python
Python实现壁纸下载与轮换
Oct 19 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
js location.replace与location.reload的区别
2010/09/08 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
python创建学生成绩管理系统
2019/11/22 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Python设计密码强度校验程序
2020/07/30 Python
如何把python项目部署到linux服务器
2020/08/26 Python
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
大专自我鉴定范文
2013/10/01 职场文书
八年级美术教学反思
2014/02/02 职场文书
经典英文广告词
2014/03/18 职场文书
关于读书的演讲稿
2014/05/07 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
代收款委托书范本
2014/10/01 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python