python中的多线程是一个非常重要的知识点,但python 默认是单任务,所以今天简单的介绍一下多线程。

什么是线程:

  • 线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。
  • 线程是进程中的一个实体,是CPU调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。
  • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行

主线程:当⼀个程序启动时,就有⼀个进程被操作系统(OS)创建,与此同时⼀个线程也⽴刻运 ⾏,该线程通常叫做程序的主线程

主线程的重要性:

  • 是产生其他子线程的线程
  • 通常它必须最后完成执行各种关闭动作

子线程:可以看做是程序执⾏的⼀条分⽀,当⼦线程启动后会和主线程⼀起同时执⾏

使用threading .Thread(target=函数名,args=(参数列表,元组))创建子线程对象

那究竟什么是多线程呢,通过下面的例子很容易就搞懂了。

假如你要烧水和拖地还有玩游戏,一共三个任务,如果是单线程来处理这三个任务的话,先烧水,等水烧开,再拖地,然后才能玩游戏。这样等待水烧开的时间就白白浪费了,倘若事交给多线程来做的话,就先烧水,烧水的过程中(相当于IO操作的时候)把时间资源让出来给拖地和玩游戏,当拖完地且玩完游戏后水也烧好了,这个就是多线程的优势。

我们分别来看一下单线程和多线程的实现:

单线程:

import timedef mop_floor():print('我要拖地了')time.sleep(1)print('地拖完了')def game():print('我要玩游戏')time.sleep(4)print('游戏结束了')def heat_up_watrt():print('我要烧水了')time.sleep(6)print('水烧开了')start_time = time.time()
heat_up_watrt()
mop_floor()
game()
end_time = time.time()
print('总共耗时:{}'.format(end_time-start_time))

结果如下:

多线程:

import threading
import timedef mop_floor():print('我要拖地了')time.sleep(1)print('地拖完了')def game():print('我要玩游戏')time.sleep(4)print('游戏结束了')def heat_up_watrt():print('我要烧水了')time.sleep(6)print('水烧开了')start_time = time.time()
t1 = threading.Thread(target=heat_up_watrt)
t2 = threading.Thread(target=mop_floor)
t3 = threading.Thread(target=game)t1.start()
t2.start()
t3.start()t1.join()
t2.join()
t3.join()end_time = time.time()
print('总共耗时:{}'.format(end_time-start_time))

结果如下:

可以看到烧水等待的时候直接执行拖地任务,并且总共耗时为6秒,比上面的单线程节省了近一半的时间。

关于这里的start和jion都是固定的操作套路,记住这两个代词以后直接套用即可,需要注意的是多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞(Blocked),到sleep结束后,线程进入就绪(Runnable)状态,等待调度的命令执行另一个子线程,线程调度将自行选择一个线程执行。

如有错误,欢迎私信纠正,谢谢支持!

一个简单的例子让你秒懂 python多线程相关推荐

  1. 扩展Python模块系列(二)----一个简单的例子

    本节使用一个简单的例子引出Python C/C++ API的详细使用方法.针对的是CPython的解释器. 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两 ...

  2. pycharm安装scrapy失败_Scrapy ——环境搭配与一个简单的例子

    在我刚接触爬虫的时候就已经听过Scrapy大名了,据说是一个很厉害的爬虫框架,不过那个时候沉迷于Java爬虫.现在终于要来揭开它神秘的面纱了,来一起学习一下吧 欢迎关注公众号:老白和他的爬虫 1.环境 ...

  3. 用几个最简单的例子带你入门 Python 爬虫

    作者 | ZackSock 来源 | 新建文件夹X(ID:ZackSock) 头图 | CSDN下载自视觉中国 前言 爬虫一直是Python的一大应用场景,差不多每门语言都可以写爬虫,但是程序员们却独 ...

  4. Django入门超easy系列(一)——— 从一个简单的例子入门

    从一个简单的例子初识Django 当下最火的语言-Python和当下最火的Web开发框架-Django会擦出怎么样的火花!? 前言 我从去年十月份开始跟公司大佬学习Django,在本系列总结自己学习D ...

  5. 图解爬虫,用几个最简单的例子带你入门Python爬虫

    一.前言 爬虫一直是Python的一大应用场景,差不多每门语言都可以写爬虫,但是程序员们却独爱Python.之所以偏爱Python就是因为她简洁的语法,我们使用Python可以很简单的写出一个爬虫程序 ...

  6. 一步一步解读神经网络编译器TVM(一)——一个简单的例子

    @TOC 前言 这是一个TVM教程系列,计划从TVM的使用说明,再到TVM的内部源码?为大家大致解析一下TVM的基本工作原理.因为TVM的中文资料比较少,也希望贡献一下自己的力量,如有描述方面的错误, ...

  7. .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子

    1. 为什么需要序列化,什么是序列化 对于一个程序来说, 使用到的对象都是存在于内存中的.如果想保存这些对象的运行时状态, 或者需要在不同进程或者网络间传递对象,就需要序列化. 序列化就是讲运行中的对 ...

  8. 一个简单的例子看java线程机制

    一个简单的例子看java线程机制 作者: zyf0808 发表日期: 2006-03-26 11:20 文章属性: 原创 复制链接 import java.util.*; public class T ...

  9. blockchain 区块链200行代码:在JavaScript实现的一个简单的例子

    blockchain 区块链200行代码:在JavaScript实现的一个简单的例子 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上 ...

最新文章

  1. How to Make a Computer Operating System
  2. 大象公会:如何做万人传播的原创内容?
  3. 网易云信携手小天才电话手表 打造视频通话体验的行业标杆
  4. QT的QLocale类的使用
  5. 重装系统后删除Cygwin的安装文件
  6. python unicode 编程 pdf,Python | Python学习之unicode和utf8
  7. CentOS 6.5 安装 Redis 执行 make #error Newer version of jemalloc required
  8. 分享下我的 netbeans 的配色方案
  9. 浏览器HTML5 写入文件
  10. 系统集成项目管理之何为系统集成
  11. 小白入门必看 ‘微信小程序地图定位开发教程‘
  12. 添加Onvif设备到Blue IRIS步骤
  13. 内存、外存、硬盘、磁盘、闪存,傻傻分不清?
  14. markdown的各种操作
  15. cad放大_cad快捷键大全amp;鼠标各键用法
  16. 鸿蒙电视如何播放手机上的歌,鸿蒙这么用 荣耀智慧屏联动手机的正确打开方式...
  17. 代码注释规范之Doxygen
  18. 个人对PIN码的基本理解
  19. 按颜色分类:黄色系(Yellow)
  20. elgamal签名算法c语言,ELGamal数字签名.doc

热门文章

  1. Contiki入门学习【摘录】
  2. 计算机二级考试当场出成绩吗
  3. 厉害了!淘宝自动刷喵币!靠这一个脚本就够了!
  4. 头像叠加android_Android自定义ViewGroup实现堆叠头像的点赞Layout
  5. python编程入门指南明日科技pdf-零基础学Python PDF 全彩影印版
  6. 学习笔记(9):C#急速入门-格式化字符串输出
  7. 软考系统架构设计师范文2:论面向服务的架构及其应用
  8. 短视频内容重复,如何伪原创处理
  9. 支付宝员工因绩效3.25B被辞退,员工告上法院,结果来了
  10. Python爬虫之获取淘宝商品信息