新写自己的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的线程模型

表示方法method,上面的锁头表示这个是类内部的方法,从方法名字命名规范可以看出,都是_和__开头的,一个下划线表示是子类可以继承,两个下划线表示是只有Thread内部可以访问,子类都不可以访问。

表示property,可以使用类直接访问:Thread._block

表示field,就是self.x定义的东东

表示变量variable

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

isDaemon是否是守护进程

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

isAlive线程是否是活动状态

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

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

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

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://www.jb51.net/article/185872.htm示例

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

python判断线程是否执行完成_判断Threading.start新线程是否执行完毕的实例相关推荐

  1. python判断线程结束_判断Threading.start新线程是否执行完毕的实例

    新写自己的Threading类 class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断 def __init__( ...

  2. mysql 判断list不为空_判断List集合为空还是null的正确打开方式

    事故场景还原 最近在写一个项目的时候遇到一个这样一个问题,我简单的还原一下场景,这是模拟一个简单的管理系统 ① 一张简单的客户表 CREATE TABLE customer( id INT(11) N ...

  3. java守护线程的使用场景_浅谈Java守护线程

    一.在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 1.Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收 ...

  4. java 线程池 初始大小_为什么tomcat的默认线程池大小如此之大? - java

    我注意到默认的tomcat 7线程池大小似乎是200. 但是普通的CPU似乎有16个内核. 因此只能并行执行16个线程 为什么tomcat使用那么多线程. 参考方案 多年以来,许多单核计算机问世,并且 ...

  5. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  6. 用python输出所有的玫瑰花数_##判断某一个四位数是不是玫瑰花数(所谓

    用Python matplotlib 怎么画风向玫瑰图 能给出程序的 提前安windrose模 from windrose import WindroseAxes from matplotlib im ...

  7. python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别

    基本上判断python对象是否为可调用的函数,有三种方法: 1.使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定 ...

  8. python判断字符串是否回文_判断字符串是否为回文 python

    回文正序和逆序一样的字符串,例如abccba 方法一 def is_palindrome1(text): l = list(text) l.reverse() t1 = ''.join(l) if t ...

  9. python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]

    练习内容:判断多个坐标是否在同一条直线上 完整代码和注释如下 print('请输入几个点的横纵坐标,程序将会返回这几个点是否在同一条直线上') def coor_nums():#获得每个值的横纵坐标 ...

最新文章

  1. PL/SQL Developer 导出表结构和表数据
  2. Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)
  3. mysql datatable_MySQL-数据表操作
  4. mysql启动选项只读_MySQL的启动选项和系统变量该如何配置?
  5. Android 运行时异常 Binary XML file line # : Error inflating class
  6. 铁芯用matlab怎么仿真,Simulink的BLDC建模与仿真
  7. Scintilla开源库使用指南
  8. 相似图片搜索原理和JAVA代码实现
  9. 量价交易——寻找妖股的底部结构
  10. oracle 一个表上的多个触发器的执行顺序
  11. win10多用户同时远程桌面登陆(允许多个RDP会话)-支持win10最新1909版2004版
  12. CS 188 (4) Uniform Cost Search( 统一代价搜索算法)
  13. 001 Python 字符串格式化 % 运算符
  14. 【杂谈】中国黑客致中国黑客和红客的公开信
  15. Unity技能系统框架(一)技能效果
  16. 安全数据集和开源工具
  17. 阿里云无影云桌面(使用测评)
  18. 2021 ICPC 南京站总结以及真题PDF
  19. Java正则表达式——验证手机号码符合性
  20. Ubuntu18下xsens IMU的驱动安装及使用imu_utils标定

热门文章

  1. linux下PNG、JEPG、JPG、Webp图片格式互转
  2. 在服务器上创建文件夹,在服务器上创建文件夹
  3. phpstorm连接mysql
  4. 11n/11ac/11ax 速率速查表
  5. 计算两个数据的百分比
  6. 蚂蚁区块链BaaS平台架构与实践
  7. PHPMyWind5.4存储XSS(CVE-2017-12984)
  8. R语言使用t.test函数进行t检验、使用配对的t检验(paired)检验组间不独立数据的差异是否有统计学意义
  9. NodeBB – 基于 Node.js 的开源论坛系统
  10. matlab 自激振荡,基于Simulink的非线性系统自激振荡的仿真