Python多线程编程(二):启动线程的两种方法


Posted in Python onApril 05, 2015

在Python中我们主要是通过thread和threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用threading模块实现多线程编程。一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。

将函数传递进Thread对象

'''  

Created on 2012-9-5  

 

@author:  walfred 

@module: thread.ThreadTest1  

@description: 

'''    

import threading  

 

def thread_fun(num):  

    for n in range(0, int(num)):  

        print " I come from %s, num: %s" %( threading.currentThread().getName(), n)  

 

def main(thread_num):  

    thread_list = list();  

    # 先创建线程对象  

    for i in range(0, thread_num):  

        thread_name = "thread_%s" %i  

        thread_list.append(threading.Thread(target = thread_fun, name = thread_name, args = (20,)))  

 

    # 启动所有线程     

    for thread in thread_list:  

        thread.start()  

 

    # 主线程中等待所有子线程退出  

    for thread in thread_list:  

        thread.join()  

 

if __name__ == "__main__":  

    main(3)

程序启动了3个线程,并且打印了每一个线程的线程名字,这个比较简单吧,处理重复任务就派出用场了,下面介绍使用继承threading的方式;

继承自threading.Thread类

''' 

Created on 2012-9-6 

 

@author: walfred 

@module: thread.ThreadTest2 

'''  

 

import threading  

 

class MyThread(threading.Thread):  

    def __init__(self):  

        threading.Thread.__init__(self);  

 

    def run(self):  

        print "I am %s" %self.name  

 

if __name__ == "__main__":  

    for thread in range(0, 5):  

        t = MyThread()  

        t.start()

接下来的文章,将会介绍如何控制这些线程,包括子线程的退出,子线程是否存活及将子线程设置为守护线程(Daemon)。

Python 相关文章推荐
Python random模块常用方法
Nov 03 Python
python插入数据到列表的方法
Apr 30 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
python查询mysql,返回json的实例
Mar 26 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
Python笔试面试题小结
Sep 07 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
Django与数据库交互的实现
Jun 03 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 Python
Python多线程编程(一):threading模块综述
Apr 05 #Python
Python中使用dom模块生成XML文件示例
Apr 05 #Python
Python中比较特别的除法运算和幂运算介绍
Apr 05 #Python
Python中使用logging模块打印log日志详解
Apr 05 #Python
Python中的两个内置模块介绍
Apr 05 #Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 #Python
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 #Python
You might like
使用php来实现网络服务
2009/09/15 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
2019/09/23 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
详解Python发送邮件实例
2016/01/10 Python
python自定义异常实例详解
2017/07/11 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
通过实例了解python property属性
2019/11/01 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
药学专业大专生的自我评价
2013/12/12 职场文书
个人自我评价分享
2013/12/20 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
会计辞职信范文
2014/01/15 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
委托协议书范本
2014/04/22 职场文书
追讨欠款律师函
2015/05/27 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
如何在python中实现ECDSA你知道吗
2021/11/23 Python
python 安全地删除列表元素的方法
2022/03/16 Python