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 爬虫爬取指定博客的所有文章
Feb 17 Python
python出现"IndentationError: unexpected indent"错误解决办法
Oct 15 Python
使用python为mysql实现restful接口
Jan 05 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
Sep 30 Python
python使用正则来处理各种匹配问题
Dec 22 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 Python
python3操作redis实现List列表实例
Aug 04 Python
Golang Web 框架Iris安装部署
Aug 14 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原创论坛
2006/10/09 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
Python标准异常和异常处理详解
2015/02/02 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
药剂学专业应届生自荐信
2013/09/29 职场文书
激励口号大全
2014/06/17 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
使用Apache Camel表达REST服务的方法
2022/06/10 Servers