threading注意点

1. 线程执行代码的封装

通过上一小节,能够看出,通过使用threading模块能完成多任务的程序开发,为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子类class,只要继承threading.Thread就可以了,然后重写run方法

示例如下:

#coding=utf-8
import threading
import timeclass MyThread(threading.Thread):def run(self):for i in range(3):time.sleep(1)msg = "I'm "+self.name+' @ '+str(i) #name属性中保存的是当前线程的名字print(msg)if __name__ == '__main__':t = MyThread()t.start()

说明

  • python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法。而创建自己的线程实例后,通过Thread类的start方法,可以启动该线程,交给python虚拟机进行调度,当该线程获得执行的机会时,就会调用run方法执行线程。

2. 线程的执行顺序

#coding=utf-8
import threading
import timeclass MyThread(threading.Thread):def run(self):for i in range(3):time.sleep(1)msg = "I'm "+self.name+' @ '+str(i)print(msg)
def test():for i in range(5):t = MyThread()t.start()
if __name__ == '__main__':test()

执行结果:(运行的结果可能不一样,但是大体是一致的)

  I'm Thread-1 @ 0I'm Thread-2 @ 0I'm Thread-5 @ 0I'm Thread-3 @ 0I'm Thread-4 @ 0I'm Thread-3 @ 1I'm Thread-4 @ 1I'm Thread-5 @ 1I'm Thread-1 @ 1I'm Thread-2 @ 1I'm Thread-4 @ 2I'm Thread-5 @ 2I'm Thread-2 @ 2I'm Thread-1 @ 2I'm Thread-3 @ 2

说明

从代码和执行结果我们可以看出,多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞(Blocked),到sleep结束后,线程进入就绪(Runnable)状态,等待调度。而线程调度将自行选择一个线程执行。上面的代码中只能保证每个线程都运行完整个run函数,但是线程的启动顺序、run函数中每次循环的执行顺序都不能确定。

3. 总结

  1. 每个线程一定会有一个名字,尽管上面的例子中没有指定线程对象的name,但是python会自动为线程指定一个名字。
  2. 当线程的run()方法结束时该线程完成。
  3. 无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。
  4. 线程的几种状态

threading注意点(python 版)相关推荐

  1. 大恒相机Python版Qt界面(一)

    更新:2022/11/18 代码已完成,详情请参考:大恒相机Python版Qt界面(二)_△ф的博客-CSDN博客 首先,很抱歉之前写的Qt.C++的UI界面鸽了...这次的大恒相机界面python版 ...

  2. 大恒相机Python版Qt界面(二)

    书接上回:大恒相机Python版Qt界面(一)_△ф的博客-CSDN博客_python大恒.目前,基于PyQt5的大恒相机UI界面开发已基本完成,总体界面如下: 该UI界面中,主要包括了相机使用中的几 ...

  3. 微信支付SDK(python版)

    最近一段时间一直在搞微信平台开发,最近的v3.37版本微信支付接口变化贼大,所以就看着php的demo移植为 python版,为了保持一致,所以接口方法基本都没有变,这样的好处就是不用写demo了,看 ...

  4. 【Leetcode】刷题之路3(python版)

    回溯专题 1.回溯算法的本质是n叉树的深度优先搜索,同时,需要注意剪枝减少复杂度. 2.回溯算法三部曲 确定参数和返回值 回溯函数终止条件 单层循环 3.回溯法思路 回溯法是一种算法思想,而递归是一种 ...

  5. 统计学习圣经!经典教材《统计学习导论》Python版

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 编辑:张倩,来源:机器之心 <统计学习导论>很经典,但习题用 ...

  6. python数据结构与算法分析_数据结构与算法(Python版)

    为什么研究数据结构与算法 本周带大家进入Python版数据结构与算法的学习.想必大家都听过"算法"一词,算法的学习对编程者来说是至关重要的.首先我们先了解一下为什么要研究数据结构与 ...

  7. 经典教材《统计学习导论》现在有了Python版

    来源:机器之心 本文约1000字,建议阅读5分钟 <统计学习导论>很经典,但用的是 R 语言,没关系,这里有份 Python 版习题实现. 斯坦福经典教材<The Element o ...

  8. 赞!经典教材《统计学习导论》终于有Python版了

    <统计学习导论>是数据科学家中最受欢迎的书籍之一,旨在介绍机器学习算法背后的概念,但这本书的习题都是用R语言实现的,这对于主要使用 Python 语言的机器学习研究者来说不太友好. 为了解 ...

  9. Manning大神牵头,斯坦福开源Python版NLP库Stanza:涵盖66种语言

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 转自:机器之心 对于斯坦福 NLP 库,我们一定不会陌生,但是这一库主要基于 Java ...

  10. 【重磅】Python版《统计学习导论》来啦!附代码链接!

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 <统计学习导论>很经典,但用的是 R 语言,没关系,这里有份 Python 版习题实 ...

最新文章

  1. fork 与 branch、clone 的区别
  2. 勤学如春起之苗,不见其增,日有所长!
  3. java痴和堆_JAVA虚拟机理解 - 爱笑的痴迷者的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. 1000道Python题库系列分享十一(9道)
  5. Xamarin自定义布局系列——PivotPage(多页面切换控件)
  6. ui unity 图片高亮_Unity5 UI图片变灰处理(UGUI)(二)
  7. centos如何界面操作mysql_【mysql】centos7下mysql的安装以及基本操作
  8. “Error launching Console Application PDFLaTeX ... “的解决方法
  9. 动态生成icon图标
  10. windows远程桌面不能复制粘贴的解决办法
  11. 论文总结:云安全研究方向及进展综述
  12. 手机邮箱可以撤回邮件吗_苹果手机邮箱撤回邮件 手机邮箱如何撤回邮件
  13. Linux驱动之DMA
  14. redo synch writes在什么情况下发生
  15. 【跨域】一篇文章彻底解决跨域设置cookie问题!
  16. Oracle查询语句及实例
  17. Python——下载数据集时报错解决:ContentTooShortError: <urlopen error retrieval incomplete: got only XX out of XX
  18. 2019牛客多校第九场AThe power of Fibonacci——扩展BM
  19. Bzoj1027 [JSOI2007]合金
  20. Apache Commons Codec

热门文章

  1. python使用print语句时显示特殊字符
  2. 解决Atom插件安装下载问题
  3. 保点发布RFID鲜肉跟踪方案
  4. 文件误删除了怎么恢复?
  5. 面试:Zookeeper
  6. 2020年前端面试之JS手写代码题合集
  7. NGINX Plus集成fail2ban进行动态IP黑名单配置
  8. EasyUI界面显示中文格式(日期中文格式)
  9. Hystrix面试 - 基于 Hystrix 线程池技术实现资源隔离
  10. Node Version Manager--NodeJS的多版本管理工具--轻松实现多个版本的NodeJS的管理开发