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脚本文件打包成可执行文件的方法
Jun 02 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
Jan 30 Python
微信公众号token验证失败解决方案
Jul 22 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 Python
Python Pygame实现俄罗斯方块
Feb 19 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 Python
Python matplotlib绘制雷达图
Apr 13 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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中的生成XML文件的4种方法分享
2012/10/06 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
基于树莓派的语音对话机器人
2019/06/17 Python
python基于Selenium的web自动化框架
2019/07/14 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
python多进程间通信代码实例
2019/09/30 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
专业实习自我鉴定
2013/10/29 职场文书
12岁生日感言
2014/01/21 职场文书
企业后勤岗位职责
2014/02/28 职场文书
大学生就业自荐书
2014/06/16 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
行风评议整改报告
2014/11/06 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
Python实现照片卡通化
2021/12/06 Python
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
SQL SERVER中的流程控制语句
2022/05/25 SQL Server