线程与threading模块(python)
2017-08-12 13:48
633 查看
本篇文章介绍线程的概念,并举例用threading模块实现多线程。
线程:线程又叫做轻量级进程,是基本的cpu执行单元。它被包含在进程之中,是进程中的实际运作单位。线程由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能。线程没有自己的系统资源,一个进程中的所有线程共享该进程所有的系统资源。
Python 标准库提供了 thread 和 threading 两个模块来对多线程进行支持。其中 thread 模块以低级、原始的方式来处理和控制线程,而 threading 模块通过对 thread 进行二次封装,提供了更方便的 api 来处理线程。本文主要介绍threading模块。
首先创建一个线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。分别举例说明:
直接调用threading.Thread来构造thread对象时,Thread的参数如下:
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
group为None;
target为线程将要执行的功能函数;
name为线程的名字,也可以在对象构造后调用setName()来设定;
args为tuple类型的参数,可以为多个,如果只有一个也的使用tuple的形式传入,例如(1,);
kwargs为dict类型的参数,也即位命名参数;
threading.Thread对象的其他方法:
start(),用来启动线程;
join(), 等待直到线程结束;
isAlive(),获取线程状态
setDeamon(), 设置线程为deamon线程,必须在start()调用前调用,默认为非demon。
注意: python的主线程在没有非deamon线程存在时就会退出。
threading.currentthread() , 用来获得当前的线程;
threading.enumerate() , 用来多的当前存活的所有线程;
创建的多个线程可以以串行的方式工作也可以以并行的方式工作,下面举例如下:
多个线程串行工作:
输出为:
线程:线程又叫做轻量级进程,是基本的cpu执行单元。它被包含在进程之中,是进程中的实际运作单位。线程由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能。线程没有自己的系统资源,一个进程中的所有线程共享该进程所有的系统资源。
Python 标准库提供了 thread 和 threading 两个模块来对多线程进行支持。其中 thread 模块以低级、原始的方式来处理和控制线程,而 threading 模块通过对 thread 进行二次封装,提供了更方便的 api 来处理线程。本文主要介绍threading模块。
首先创建一个线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。分别举例说明:
__author__ = "Allen Liu" __time__ = "2017/8/11" '''This program used to ''' import threading # 自定义线程类,继承自Thread类并重写其run方法 class MyThread(threading.Thread): def __init__(self, name): # 继承父类__init__方法 threading.Thread.__init__(self) self.name = name def run(self): # 重写run方法 print("running on:%s" % self.name) t1 = MyThread('Threading-1') # 创建线程实例 t2 = MyThread('Threading-2') t1.start()# 调用start方法启动线程 t2.start()输出为:
running on:Threading-1 running on:Threading-2通过创建一个threading.Thread对象创建线程:
__author__ = "Allen Liu" __time__ = "2017/8/11" '''This program used to ''' import threading import time def run(name): print("running on: %s" % name) #time.sleep(1) s = time.time() t1 = threading.Thread(target=run, args = ('Threading-1', )) # 创建线程,参数以元组的形式传入 t2 = threading.Thread(target=run, args = ('Threading-2', )) t1.start() # 运行线程 t2.start() print("ending") # 多线程的主进程
直接调用threading.Thread来构造thread对象时,Thread的参数如下:
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
group为None;
target为线程将要执行的功能函数;
name为线程的名字,也可以在对象构造后调用setName()来设定;
args为tuple类型的参数,可以为多个,如果只有一个也的使用tuple的形式传入,例如(1,);
kwargs为dict类型的参数,也即位命名参数;
threading.Thread对象的其他方法:
start(),用来启动线程;
join(), 等待直到线程结束;
isAlive(),获取线程状态
setDeamon(), 设置线程为deamon线程,必须在start()调用前调用,默认为非demon。
注意: python的主线程在没有非deamon线程存在时就会退出。
threading.currentthread() , 用来获得当前的线程;
threading.enumerate() , 用来多的当前存活的所有线程;
创建的多个线程可以以串行的方式工作也可以以并行的方式工作,下面举例如下:
多个线程串行工作:
__author__ = "Allen Liu" __time__ = "2017/8/11" '''This program used to ''' import threading import time begin = time.time()# 记录程序的起始时间 def run(name): print("running on: %s" % name) time.sleep(1) threads = [] # 实例化10个线程 for i in range(10): threads.append(threading.Thread(target=run, args=(('Threading-%s' % i), ))) # 依次运行10个线程 for t in threads: t.start() t.join() end = time.time() # 记录程序的结束时间 print("All running time is: %s" % (end - begin))
输出为:
running on: Threading-0 running on: Threading-1 running on: Threading-2 running on: Threading-3 running on: Threading-4 running on: Threading-5 running on: Threading-6 running on: Threading-7 running on: Threading-8 running on: Threading-9 All running time is: 10.006572246551514并发工作(注意与并行的区别):
import threading import time begin = time.time()# 记录程序的起始时间 def run(name): print("running on: %s" % name) time.sleep(1) threads = [] # 实例化10个线程 for i in range(10): threads.append(threading.Thread(target=run, args=(('Threading-%s' % i), ))) # 依次运行10个线程 for t in threads: t.start() for t in threads: t.join() end = time.time() # 记录程序的结束时间 print("All running time is: %s" % (end - begin))输出为:
running on: Threading-0 running on: Threading-1 running on: Threading-2 running on: Threading-3 running on: Threading-4 running on: Threading-5 running on: Threading-6 running on: Threading-7 running on: Threading-8 running on: Threading-9 All running time is: 1.0010573863983154
相关文章推荐
- Python:使用threading模块实现多线程编程八[使用Event实现线程间通信]
- 关于Python的进程线程协程之threading模块(三)Event对象
- python核心编程-线程之threading模块
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- 人生苦短之我用Python篇(线程/进程、threading模块:全局解释器锁gil/信号量/Event、)
- Python模块整理(四):线程模块threading
- Python 线程的使用(threading模块)
- 关于Python的进程线程协程之threading模块(四)Condition对象
- Python使用Threading模块创建线程
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- Python 浅析线程(threading模块)和进程(process)
- 关于Python的进程线程协程之threading模块(五)Time对象
- python中的线程使用--threading模块
- python之threading模块创建线程
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- python的线程处理模块——thread,threading
- 关于Python的进程线程协程之threading模块(一)Thread类
- python:threading多线程模块-创建线程
- 在Python中通过threading模块定义和调用线程的方法
- python的线程处理模块——thread,threading