Python学习-并发编程之多线程
2017-08-31 00:00
351 查看
Python学习-并发编程之多线程
threading模块概述
学过Python的人应该都知道,Python是支持多线程的,并且是native的线程。本文主要是通过threading这个模块来实现多线程的,threading模块是对thread模块的二次封装,提供了更方便的API来操作线程 。目前Python对线程的支持还不够完善,不能利用多CPU,所以本文概述的都是进程下的多线程。注意:线程中没有父子关系,一个进程中可以包含N个线程,每个线程之间都是平等关系。创建线程
一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。在这之前我们来介绍一下Thread类吧!Thread类概述
# 下面只是列举一下常用的属性和方法 class Thread: ''' group:参数一直为None; target:参数为线程程要执行的代码,即函数的地址; name:参数为线程的名称,可以自定义; args:即以位置传参的方式给线程程要执行的代码传递参数,传参时必须时元组形式; kwargs:即以关键字传参的方式给线程要执行的代码传递参数; ''' def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None): pass def start(self): '''启动线程,并调用该线程中的run()方法。''' pass def run(self): '''线程启动时运行的方法,正是它去调用target指定的函数。''' pass def join(self, timeout=None): '''主线程等待其它线程执行完毕才继续执行,timeout参数为等待时间。''' pass def is_alive(self): '''如果线程还在运行,返回True。''' pass def getName(self): '''获取线程的名字。''' pass def setName(self): '''更改或设置线程的名字。''' pass
创建线程(方法一)
# 把要执行的函数地址传给线程对象 import random from threading import Thread # 创建一个函数,函数处理,如果一个数 可以整除2就整除,不能整除就*3+1再整除,直到结果为1 def Calculation(value, count): if value == 1: print(count) return if value % 2 == 0: count += 1 value = value / 2 else: value = value * 3 + 1 Calculation(value, count) # 注意:在windows中Thread()必须放到# if __name__ == '__main__':下 if __name__ == '__main__': count = 0 # 创建线程程时,所有参数必须按关键子方式传参,且args必须为一个元组,最后一个元素末尾要加“,” thread_1 = Thread(target=Calculation, args=(random.randint(1, 10), count,)) thread_2 = Thread(target=Calculation, args=(random.randint(1, 10), count,)) # 使用start()开启子进程 thread_1.start() thread_2.start() # 使用join()方法阻塞线程,直到线程结束 thread_1.join() thread_2.join() print("主!")
创建线程(方法二)
# 创建一个新的类,这个类继承Thread,并将要执行的代码方放到这个新类中 import random from threading import Thread class Sub_Thread(Thread): # 创建一个继承Thread的类 def __init__(self, value, count): super().__init__() # 用super()方法调用Thread类的__init__()方法 self.value = value self.count = count def run(self): # 注意:线程类必须有run()方法 self.Calculation(self.value, self.count) # run()方法中包含需要执行的代码 def Calculation(self, value, count): # 创建线程需要执行的函数 if value == 1: print(count) return if value % 2 == 0: count += 1 value = value / 2 else: value = value * 3 + 1 self.Calculation(value, count) # 注意:在windows中Thread()必须放到# if __name__ == '__main__':下 if __name__ == '__main__': count = 0 thread_1 = Sub_Thread(random.randint(1, 10), count) # 实例化一个线程对象 thread_2 = Sub_Thread(random.randint(1, 10), count) thread_1.start() # 开启线程 thread_2.start() # 使用join()方法阻塞线程,直到线程结束 thread_1.join() thread_2.join() print("主!")
Thread类其他属性及方法的应用:
# Thread类的其他属性及方法概述: # daemon属性 thread_1.daemon = True # 开启守护进程,即父进程结束后,不管子进程是否运行完都一起结束 # getName()方法 # 获取线程的名称 thread_name = thread_1.getName() # setName()方法 thread_1.setName('Calculation_1') # 设置线程的名称 # is_alive()方法 thread_1.is_alive() # 返回线程的状态,布尔值 # join()方法 thread_1.join(3) # 等待线程结束,如果线程不结束,程序则不往下执行,等待时间为3秒
相关文章推荐
- iOS-多线程编程学习之GCD——串行队列和并发队列(五)
- [学习随笔]并发编程与多线程二
- 开始慢慢学习这本书了。。Python编程实战:运用设计模式、并发和程序库创建高质量程序
- Python多进程并发与多线程并发编程实例总结
- 多线程学习之深入理解Java多线程与并发编程
- Java多线程编程--(10)学习Java5.0 并发编程包--线程工具类
- Python 并发编程之使用多线程和多处理器
- Python3并发编程之多线程
- Python学习-并发编程之线程池
- python并发编程之多进程、多线程、异步和协程详解
- Java多线程编程--(8)学习Java5.0 并发编程包--线程池、Callable & Future 简介
- python多线程并发学习
- Python并发编程之创建多线程的几种方法(二)
- Python并发编程之创建多线程的几种方法(二)
- JAVA并发设计模式学习笔记(一)—— JAVA多线程编程
- python并发编程之多线程理论部分(day9)
- python并发编程之多进程、多线程、异步和协程详解
- java多线程和并发编程学习总结 ----基础篇4
- python基于tornade的高并发接口编程实战学习
- Python学习笔记--多线程编程,thread