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获取单个程序CPU使用情况趋势图
Mar 10 Python
详解Django中的权限和组以及消息
Jul 23 Python
python 垃圾收集机制的实例详解
Aug 20 Python
python中的字典操作及字典函数
Jan 03 Python
mac 安装python网络请求包requests方法
Jun 13 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
tensorflow实现简单逻辑回归
Sep 07 Python
Django Rest framework认证组件详细用法
Jul 25 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
pytorch 实现模型不同层设置不同的学习率方式
Jan 06 Python
python实现定时发送邮件到指定邮箱
Dec 23 Python
Python自动化之批量处理工作簿和工作表
Jun 03 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 程序授权验证开发思路
2009/07/09 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
pandas 时间格式转换的实现
2019/07/06 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
电子商务应届生求职信
2013/11/16 职场文书
项目计划书范文
2014/01/09 职场文书
学校标语大全
2014/06/19 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
新学期开学标语2015
2015/07/16 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
go web 预防跨站脚本的实现方式
2021/06/11 Golang
delete in子查询不走索引问题分析
2022/07/07 MySQL