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使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
python打开文件并获取文件相关属性的方法
Apr 23 Python
Django 前后台的数据传递的方法
Aug 08 Python
Python实现进程同步和通信的方法
Jan 02 Python
Python读写/追加excel文件Demo分享
May 03 Python
tensorflow实现简单逻辑回归
Sep 07 Python
python实现简单flappy bird
Dec 24 Python
pandas DataFrame创建方法的方式
Aug 02 Python
Python数据可视化图实现过程详解
Jun 12 Python
Python如何定义接口和抽象类
Jul 28 Python
python缺失值的解决方法总结
Jun 09 Python
Python编程源码报错解决方法总结经验分享
Oct 05 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中http与https跨域共享session的解决方法
2014/12/20 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
如何抽象一个Vue公共组件
2017/10/17 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
django中ImageField的使用详解
2020/12/21 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
大学校园毕业自我鉴定
2014/01/15 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
二年级作文之动物作文
2019/11/13 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis