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 相关文章推荐
Web服务器框架 Tornado简介
Jul 16 Python
python迭代器实例简析
Sep 25 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
Python的requests网络编程包使用教程
Jul 11 Python
python实现数据分析与建模
Jul 11 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
flask框架jinja2模板与模板继承实例分析
Aug 01 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 Python
Python识别验证码的实现示例
Sep 30 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 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中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
Javascript 读书笔记索引贴
2010/01/11 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
python执行子进程实现进程间通信的方法
2015/06/02 Python
详解Python用户登录接口的方法
2019/04/17 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
Django框架models使用group by详解
2020/03/11 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
大学生水果店创业计划书
2014/01/28 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
婚前保证书
2014/04/29 职场文书
公民代理授权委托书
2014/09/24 职场文书
单位委托书
2014/10/15 职场文书
测量员岗位职责
2015/02/14 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
2019同学聚会主持词
2019/05/06 职场文书
创业计划书之物流运送
2019/09/17 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL