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解析xml文件实例分享
Dec 04 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
python定时器(Timer)用法简单实例
Jun 04 Python
深入理解Python中字典的键的使用
Aug 19 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
Python中拆分字符串的操作方法
Jul 23 Python
详解python itertools功能
Feb 07 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
浅谈Python类的单继承相关知识
May 12 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
js动态生成指定行数的表格
2013/07/11 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
python局部赋值的规则
2013/03/07 Python
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
使用SAE部署Python运行环境的教程
2015/05/05 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
python运行时间的几种方法
2016/06/17 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
Python随机生成手机号、数字的方法详解
2017/07/21 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
一月红领巾广播稿
2014/02/11 职场文书
大学生就业意向书
2015/05/11 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
Java实现多文件上传功能
2021/06/30 Java/Android