判断Threading.start新线程是否执行完毕的实例


Posted in Python onMay 02, 2020

新写自己的Threading类

class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断
 def __init__(self,func = ""):#输入待执行函数名 我执行的函数没有参数就没有加args输入了
 threading.Thread.__init__(self)
 self.func = func
 self.result = 1#未完成为1 标志位
 # 调用start自动执行的函数
 def run(self):
 self.result = self.func()
 self.result = 0#完成返回0

然后执行

class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断
 def __init__(self,func = ""):#输入待执行函数名 我执行的函数没有参数就没有加args输入了
 threading.Thread.__init__(self)
 self.func = func
 self.result = 1#未完成为1 标志位
 # 调用start自动执行的函数
 def run(self):
 self.result = self.func()
 self.result = 0#完成返回0

这样就可以判断os.sysytem里语句是否执行完成是否

补充知识:python的threading.Thread线程的start、run、join、setDaemon

Pycharm整体看下Thread类的内容:模拟的是Java的线程模型

判断Threading.start新线程是否执行完毕的实例

判断Threading.start新线程是否执行完毕的实例 表示方法method,上面的锁头表示这个是类内部的方法,从方法名字命名规范可以看出,都是_和__开头的,一个下划线表示是子类可以继承,两个下划线表示是只有Thread内部可以访问,子类都不可以访问。

判断Threading.start新线程是否执行完毕的实例 表示property,可以使用类直接访问:Thread._block

判断Threading.start新线程是否执行完毕的实例 表示field,就是self.x定义的东东

判断Threading.start新线程是否执行完毕的实例 表示变量variable

判断Threading.start新线程是否执行完毕的实例

name/getName/setName是线程名字有关的;

isDaemon是否是守护进程

setDaemon设置为守护进程,如果把调用线程设置为守护线程,那么等调用线程结束后,被调用的子线程结束与否都会随着守护线程结束

判断Threading.start新线程是否执行完毕的实例

isAlive线程是否是活动状态

start方法开启一个新线程。把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法。

判断Threading.start新线程是否执行完毕的实例

run线程实际在运行的内容,可以被子类继承和重写overide。

判断Threading.start新线程是否执行完毕的实例

join阻塞调用它的线程,直到等待被调用的线程运行结束,其实就变成了单线程。参数timeout的作用是,当前线程等待被调用的子线程的时间,如果时间到了,不管子线程是否结束,当前线程都进入就绪状态,重新等待CPU调度。

判断Threading.start新线程是否执行完毕的实例

Join方法的Java示例:

新建一个Thread类,重写run()方法:

public class MyThread extends Thread {

 @Override
 public void run() {
  System.out.println("子线程执行完毕");
 }
}

新建测试类,测试Join()方法:

public class TestThread {

 public static void main(String[] args) {
  //循环五次
  for (int i = 0; i < 5; i++) {

   MyThread thread = new MyThread();
   //启动线程
   thread.start();
   try {
    //调用join()方法
    thread.join();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println("主线程执行完毕");
   System.out.println("~~~~~~~~~~~~~~~");

  }
 }
}

输出结果如下:

子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~
子线程执行完毕
主线程执行完毕
~~~~~~~~~~~~~~~

结果分析: 子线程每次都在主线程之前执行完毕,即子线程会在主线程之前执行。

什么时候用join()方法?

在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。

用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止。

run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法

可见join和setDaemon作用是相反的,一个是等待子线程结束,一个是不等到子线程结束,有可能把子线程强制结束。如果两个都不设置的时候,那么主线程和子线程各自运行各自的,互不干扰,谁结束都不会影响另一个运行情况:见https://3water.com/article/185872.htm示例

以上这篇判断Threading.start新线程是否执行完毕的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 读写、创建 文件的方法(必看)
Sep 12 Python
python利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
shell命令行,一键创建 python 模板文件脚本方法
Mar 20 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
python简单实现插入排序实例代码
Dec 16 Python
Python实战之疫苗研发情况可视化
May 18 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 Python
python中threading开启关闭线程操作
May 02 #Python
浅谈python3打包与拆包在函数的应用详解
May 02 #Python
构建高效的python requests长连接池详解
May 02 #Python
如何基于windows实现python定时爬虫
May 01 #Python
如何基于python实现不邻接植花
May 01 #Python
Python接口测试结果集实现封装比较
May 01 #Python
解决python虚拟环境切换无效的问题
Apr 30 #Python
You might like
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
JS面向对象编程 for Cookie
2010/09/19 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
jQuery操作css样式
2017/05/15 jQuery
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
python测试驱动开发实例
2014/10/08 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
Guess欧洲官网:美国服饰品牌
2019/08/06 全球购物
商场经理竞聘演讲稿
2014/01/01 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
2014年党课学习材料
2014/05/11 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
Nginx缓存设置案例详解
2021/09/15 Servers
Python 全局空间和局部空间
2022/04/06 Python