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中用fork()函数生成的子进程
May 04 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
python实现判断一个字符串是否是合法IP地址的示例
Jun 04 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
Python日志模块logging基本用法分析
Aug 23 Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 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
安装APACHE
2007/01/15 PHP
php的正则处理函数总结分析
2008/06/20 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
10个实用的脚本代码工具
2010/05/04 Javascript
javascript数组的使用
2013/03/28 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
python实现发送邮件功能
2017/07/22 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
django中使用POST方法获取POST数据
2019/08/20 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
python变量的作用域是什么
2020/05/26 Python
自学python用什么系统好
2020/06/23 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
中专毕业生自我鉴定
2014/02/02 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
物业保洁员管理制度
2015/08/05 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
go开发alertmanger实现钉钉报警
2021/07/16 Golang