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的Django框架中使用通用视图的方法
Jul 21 Python
基于python 字符编码的理解
Sep 02 Python
详解Python异常处理中的Finally else的功能
Dec 29 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
Python实现屏幕截图的两种方式
Feb 05 Python
使用python生成目录树
Mar 29 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
基于python实现百度翻译功能
May 09 Python
Python pip安装模块提示错误解决方案
May 22 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 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
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
vue3.0 上手体验
2020/09/21 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
python+opencv实现动态物体识别
2018/01/09 Python
Php多进程实现代码
2018/05/07 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
python实现指定ip端口扫描方式
2019/12/17 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
python如何进入交互模式
2020/07/06 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
pymysql模块使用简介与示例
2020/11/17 Python
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
物流司机岗位职责
2013/12/28 职场文书
领导干部培训感言
2014/01/23 职场文书
人力资源部岗位职责
2015/02/11 职场文书
化工生产实习心得体会
2016/01/22 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript