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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
Python基于twisted实现简单的web服务器
Sep 29 Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
python中时间模块的基本使用教程
May 14 Python
Win10下Python3.7.3安装教程图解
Jul 08 Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
如何使用python包中的sched事件调度器
Apr 30 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
如何将数据从文本导入到mysql
2006/10/09 PHP
php 将excel导入mysql
2009/11/09 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
tab栏切换原理
2017/03/22 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python 线程池用法简单示例
2019/10/02 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
如何填写个人简历自我评价
2013/12/10 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
电子商务专业求职信
2014/07/10 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
小学新课改心得体会
2016/01/22 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
小学四年级作文之写景
2019/08/23 职场文书
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js