From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html

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

# encoding: UTF-8import threadingimport time

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

执行结果:

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

从代码和执行结果我们可以看出,多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞(Blocked),到sleep结束后,线程进入就绪(Runnable)状态,等待调度。而线程调度将自行选择一个线程执行。上面的代码中只能保证每个线程都运行完整个run函数,但是线程的启动顺序、run函数中每次循环的执行顺序都不能确定。
此外需要注意的是:
1.每个线程一定会有一个名字,尽管上面的例子中没有指定线程对象的name,但是python会自动为线程指定一个名字。
2.当线程的run()方法结束时该线程完成。
3. 无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。

上面的例子只是简单的演示了创建了线程、主动挂起以及退出线程。下一节,将讨论用互斥锁进行线程同步。

python多线程编程(2): 线程的创建、启动、挂起和退出相关推荐

  1. 多线程编程(2): 线程的创建、启动、挂起和退出

    python多线程编程(2): 线程的创建.启动.挂起和退出 如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法.而创建 ...

  2. Python多线程编程之线程子类化

    Python多线程编程之线程子类化 基本思路 Threading模块简介 **MyThread**主要代码 实例 所有代码 运行结果 基本思路 导入Threading模块下的Thread类,将其子类化 ...

  3. python多线程编程(8):线程的合并和后台线程

    From: http://www.cnblogs.com/holbrook/archive/2012/03/21/2410120.html 线程的合并 python的Thread类中还提供了join( ...

  4. python多线程编程(7):线程间通信

    From: http://www.cnblogs.com/holbrook/archive/2012/03/21/2409031.html 很多时候,线程之间会有互相通信的需要.常见的情形是次要线程为 ...

  5. VC多线程编程之线程创建与示例

    一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX ...

  6. python 多线程 setdaemon_python使用Thread的setDaemon启动后台线程教程

    多线程编程当中, 线程的存在形态比较抽象. 通过前台线程后台线程, 可以有效理解线程运行顺序.(复杂的多线程程序可以通过设置线程优先级实现) 后台线程与前台线程的直接区别是, 1)setDaemon( ...

  7. python多线程编程(1): python对多线程的支持

    From: http://www.cnblogs.com/holbrook/archive/2012/03/01/2376408.html 前面介绍过多线程的基本概念,理解了这些基本概念,掌握pyth ...

  8. python多线程编程_python多线程编程(1): python对多线程的支持

    前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支持. 虚拟机层面 Python虚拟机使用GIL(Global ...

  9. Python多线程编程---(1)threading 模块 Thread 类

    全文参考:Python多线程编程(一):threading 模块 Thread 类的用法详解_frank 的专栏-CSDN博客 最近看了下团队自动化测试用例的代码,里面有涉及并行处理的逻辑,主要是基于 ...

最新文章

  1. 关于NB-IoT的十大问题和答案【转】
  2. sharepoint 2010 如何使用sharepoint多媒体视频播放media webpart功能
  3. 深度学习(28)随机梯度下降六: 多输出感知机梯度
  4. Web Service视频分享
  5. js udp通信_Node.JS实战17:开发一个正向代理服务器
  6. python实现自动打电话软件_python拨打电话
  7. 2020年数据库系统工程师下午真题及答案解析
  8. 【Adobe Premiere Pro 2020】pr模板下载和pr使用模板创建视频、pr调色说明、pr全景视频编辑说明、pr无缝转场特效制作流程、pr保存预设效果和pr使用预设效果
  9. Java多线程游戏-雷霆战机
  10. 解决Proteus仿真时候提示Could not load simulator DLL错误
  11. Zabbix5.0监控CenterOS(RPM版)
  12. Android之调节屏幕亮度
  13. 【Kafka】Kafka为什么快?
  14. vue在创建项目时不小心选上代码校验选项(linter/ESlint)后,如何关掉?
  15. 2019河南省第十二届ACM大学生程序设计竞赛参赛感
  16. 算法系统下的外卖平台:饿了么可选多等5分钟,美团无差别8分钟
  17. 很干净的4句话,终生受用
  18. 数据加载、存储与文件格式(python)
  19. 洛谷10月月赛Round.1| P3400 仓鼠窝[单调栈]
  20. 题解 P2285 【[HNOI2004]打鼹鼠】

热门文章

  1. linux的搜索和时间
  2. PHP的SESSION使用,文件上传下载等
  3. 老生常谈–希望别再纠结了朋友
  4. Altiris™ IT Management Suite 7 Release Notes
  5. [转载]vs2008下安装boost
  6. 数据科学还是计算机科学_数据科学101
  7. 清洁数据ploy n_清洁屋数据
  8. c++运行不出结果_fastjson 不出网利用总结
  9. leetcode 1438. 绝对差不超过限制的最长连续子数组(滑动窗口+treemap)
  10. leetcode 888. 公平的糖果棒交换(set)