多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。

Python 多线程之使用方法

Python 提供多线程编程的模块有以下几个:

- _thread

- threading

- Queue

- multiprocessing

下面一一介绍:

1. _thread 模块提供了低级别的基本功能来支持多线程功能,提供简单的锁来确保同步,推荐使用 threading 模块。

2. threading 模块对 _thread 进行了封装,提供了更高级别,功能更强,更易于使用的线程管理的功能,对线程的支持更为完善,绝大多数情况下,只需要使用 threading 这个高级模块就够了。

使用 threading 进行多线程操作:

方法一:是创建 threading.Thread 实例,调用其 start() 方法。import time

import threading

def task_thread(counter):

print(f'线程名称:{threading.current_thread().name} 参数:{counter} 开始时间:{time.strftime("%Y-%m-%d

%H:%M:%S")}')

num = counter

while num:

time.sleep(3)

num -= 1

print(f'线程名称:{threading.current_thread().name} 参数:{counter} 结束时间:{time.strftime("%Y-%m-%d

%H:%M:%S")}')

if __name__ == '__main__':

print(f'主线程开始时间:{time.strftime("%Y-%m-%d %H:%M:%S")}')

#初始化3个线程,传递不同的参数

t1 = threading.Thread(target=task_thread, args=(3,))

t2 = threading.Thread(target=task_thread, args=(2,))

t3 = threading.Thread(target=task_thread, args=(1,))

#开启三个线程

t1.start()

t2.start()

t3.start()

#等待运行结束

t1.join()

t2.join()

t3.join()

print(f'主线程结束时间:{time.strftime("%Y-%m-%d %H:%M:%S")}')

运行结果如下所示:主线程开始时间:2018-07-06 23:03:46

线程名称:Thread-1 参数:3 开始时间:2018-07-06 23:03:46

线程名称:Thread-2 参数:2 开始时间:2018-07-06 23:03:46

线程名称:Thread-3 参数:1 开始时间:2018-07-06 23:03:46

线程名称:Thread-3 参数:1 结束时间:2018-07-06 23:03:49

线程名称:Thread-2 参数:2 结束时间:2018-07-06 23:03:52

线程名称:Thread-1 参数:3 结束时间:2018-07-06 23:03:55

主线程结束时间:2018-07-06 23:03:55

方法二:继承 Thread 类,在子类中重写 run() 和 init() 方法。import time

import threading

class MyThread(threading.Thread):

def __init__(self, counter):

super().__init__()

self.counter = counter

def run(self):

print(

f'线程名称:{threading.current_thread().name} 参数:{self.counter} 开始时间:{time.strftime

("%Y-%m-%d %H:%M:%S")}'

)

counter = self.counter

while counter:

time.sleep(3)

counter -= 1

print(

f'线程名称:{threading.current_thread().name} 参数:{self.counter} 结束时间:{time.strftime

("%Y-%m-%d %H:%M:%S")}'

)

if __name__ == "__main__":

print(f'主线程开始时间:{time.strftime("%Y-%m-%d %H:%M:%S")}')

# 初始化3个线程,传递不同的参数

t1 = MyThread(3)

t2 = MyThread(2)

t3 = MyThread(1)

# 开启三个线程

t1.start()

t2.start()

t3.start()

# 等待运行结束

t1.join()

t2.join()

t3.join()

print(f'主线程结束时间:{time.strftime("%Y-%m-%d %H:%M:%S")}')

运行结果如下,与方法一的运行结果一致。主线程开始时间:2018-07-06 23:34:16

线程名称:Thread-1 参数:3 开始时间:2018-07-06 23:34:16

线程名称:Thread-2 参数:2 开始时间:2018-07-06 23:34:16

线程名称:Thread-3 参数:1 开始时间:2018-07-06 23:34:16

线程名称:Thread-3 参数:1 结束时间:2018-07-06 23:34:19

线程名称:Thread-2 参数:2 结束时间:2018-07-06 23:34:22

线程名称:Thread-1 参数:3 结束时间:2018-07-06 23:34:25

主线程结束时间:2018-07-06 23:34:25

如果继承 Thread 类,想调用外部传入函数,代码如下所示:import time

import threading

def task_thread(counter):

print(f'线程名称:{threading.current_thread().name} 参数:{counter} 开始时间:{time.strftime("%Y-%m-%d

%H:%M:%S")}')

num = counter

while num:

time.sleep(3)

num -= 1

print(f'线程名称:{threading.current_thread().name} 参数:{counter} 结束时间:{time.strftime("%Y-%m-%d

%H:%M:%S")}')

class MyThread(threading.Thread):

def __init__(self, target, args):

super().__init__()

self.target = target

self.args = args

def run(self):

self.target(*self.args)

if __name__ == "__main__":

print(f'主线程开始时间:{time.strftime("%Y-%m-%d %H:%M:%S")}')

# 初始化3个线程,传递不同的参数

t1 = MyThread(target=task_thread,args=(3,))

t2 = MyThread(target=task_thread,args=(2,))

t3 = MyThread(target=task_thread,args=(1,))

# 开启三个线程

t1.start()

t2.start()

t3.start()

# 等待运行结束

t1.join()

t2.join()

t3.join()

print(f'主线程结束时间:{time.strftime("%Y-%m-%d %H:%M:%S")}')

这样就和方法一是相通的,实例化自定义的线程类,运行结果不变。

python如何使用多线程_python如何使用多线程相关推荐

  1. python多程优化_Python 基本功: 13. 多线程运算提速

    小编在前两天开通了一个 Python 金融的专栏,顺便用 TuShare 下载了几只 A股的数据,有兴趣的小伙伴可以去看一下: 多多教Python:Python 金融: TuShare API 获取股 ...

  2. python爬虫程序下载_Python爬虫之多线程下载程序类电子书

    近段时间,笔者发现一个神奇的网站:http://www.allitebooks.com/ ,该网站提供了大量免费的编程方面的电子书,是技术爱好者们的福音.其页面如下: ![](https://imag ...

  3. python并发与并行_python多进程,多线程分别是并行还是并发

    匿名用户 1级 2017-09-30 回答 展开全部 并发和并行 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行. 你吃饭吃到一半,电话来了,你停了下来接了电话, ...

  4. python tcp服务器 多线程_Python中的多线程TCP服务器

    我使用python的threding模块创建了一个简单的多线程tcp服务器.每次连接新客户端时,该服务器都会创建一个新线程. #!/usr/bin/env python import socket, ...

  5. python线程同步锁_Python实现的多线程同步与互斥锁功能示例

    本文实例讲述了Python实现的多线程同步与互斥锁功能.分享给大家供大家参考,具体如下: #! /usr/bin/env python #coding=utf-8 import threading i ...

  6. python如何开启多线程_Python如何创建多线程

    Python提供了_thread和threading两个模块来支持多线程,但_thread提供低级别的.原始的县城支持,以及一个简单的锁,通常情况下我们使用后者,来进行多线程编程 创建多线程 使用th ...

  7. python 线程 的类库_python类库32[多线程]

    一 python 多线程 因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只有一个线程在执行,从而简化了python解释器的实现,且 ...

  8. python如何调用c函数实现真正意义的多线程_python如何使用多线程执行多个函数?...

    之前小编给大家介绍了用python去返回了一个值,立马就有小伙伴跟小编留言说道"能都执行多个内容?"于是,小编就给大家整理最细致,也是最简单的实现方法,方便大家理解学习,一起来看下 ...

  9. python计算密集型任务_Python多进程和多线程测试比高低,只为证明谁是最快的“仔”

    目的 前面分别详细介绍了python的多进程和多线程,如果还没看前面文章的,请先看下之前的文章详解内容.有任何疑问请留言.那这里就不再对多线程和多进程的实现和用法再赘述了.那各位同学学习了python ...

  10. python 协程 多线程_python进阶之多线程(简单介绍协程)

    多线程 线程:实现多任务的另一种方式 一个进程中,也经常需要同时做多件事,就需要同时运行多个'子任务',这些子任务,就是线程 线程又被称为轻量级进程(lightweight process),是更小的 ...

最新文章

  1. pl/sql显示乱码
  2. python if语句多个条件-Python中if有多个条件怎么办
  3. UA MATH563 概率论的数学基础1 概率空间3 概率测度
  4. 5.0、Android Studio调试你的应用
  5. hdu 2036 计算多边形面积
  6. 拼字符串成为时间,和两个计算时间点的中间值
  7. Linux上Svn环境搭建
  8. Mybatis参数Integer类型值为0 源码处理
  9. PHP 链接手机短信接口
  10. Backstepping反步法控制四旋翼无人机(一)
  11. 2.1 分布式文件系统HDFS-使用
  12. 对标金九银十:各大厂最新Java面试真题整理+简历模板
  13. 一文搞清楚opengl、openglES、GLEW、的关系GLUT、FreeGLUT、GLFW
  14. 计算机操作系统原理--Linux实例分析
  15. 视频教程-软考系统集成项目管理工程师视频教程(法律法规)-软考
  16. 讯搜问题排查xunsearch
  17. pytorch3d 上手测试
  18. Ubnt Er-X MTU相关设置
  19. Vue实现简易计算器
  20. 1410:最大质因子序列

热门文章

  1. Kafka快速入门(Kafka消费者)
  2. 面试常见问题之adb命令
  3. 【操作系统——存储器管理习题】 某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB,假定某时刻一用户页表中已调入内存的页面对应的物理块号如下:则逻辑地址0A5C(H)物理地址为?
  4. IT技术论坛网站推荐
  5. iOS简单实现图片模糊渐变效果
  6. 【树莓派不吃灰】基础篇④ Raspberry Pi上搭建NodeJS运行环境
  7. 技能提升之Latex控制图片位置
  8. python程序化选股_GitHub - cat-steel/stock_pick: 这时一个通过设定选股条件来帮我们筛选股票的python程序...
  9. 云客Drupal源码分析之菜单上下文连接Menu contextual links
  10. L1-054 福到了-java