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 lxml模块安装教程
Jun 02 Python
实践Vim配置python开发环境
Jul 02 Python
python和opencv实现抠图
Jul 18 Python
对python模块中多个类的用法详解
Jan 10 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Python简单基础小程序的实例代码
Apr 28 Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
详解python metaclass(元类)
Aug 13 Python
关于的python五子棋的算法
May 02 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
Terran魔法科技
2020/03/14 星际争霸
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
vue实现淘宝购物车功能
2020/04/20 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
python list转矩阵的实例讲解
2018/08/04 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
会计主管岗位职责
2014/01/03 职场文书
小区文明倡议书
2014/05/16 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
主持人大赛开场白
2015/05/29 职场文书
医院见习总结
2015/06/24 职场文书