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 相关文章推荐
Python3 正在毁灭 Python的原因分析
Nov 28 Python
Python 功能和特点(新手必学)
Dec 30 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
python实现数据图表
Jul 29 Python
Python中使用支持向量机SVM实践
Dec 27 Python
PyCharm代码回滚,恢复历史版本的解决方法
Oct 22 Python
python sorted函数的小练习及解答
Sep 18 Python
python创建n行m列数组示例
Dec 02 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
用python进行视频剪辑
Nov 02 Python
快速解决pymongo操作mongodb的时区问题
Dec 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
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
JavaScript入门基础
2015/08/12 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
土木工程应届生自荐信
2013/09/24 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
个人委托书怎么写
2014/04/04 职场文书
群教个人对照检查材料
2014/08/20 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
委托书格式要求
2015/01/28 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
退休欢送会致辞
2015/07/31 职场文书
感恩教育主题班会
2015/08/12 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书