python获取线程返回值

前言

工作中的需求

将前端传过来的字符串信息通过算法转换成语音,并将语音文件返回回去

由于算法不是我写的,只需要调用即可,但是算法执行速度相当缓慢

我的优化思路是,将前端的字符串按照句号分割,开启相等长度的线程池,并发执行算法

  1. 首先判断这种思路是否可行

    • 实现多线程

      常用思路为,import Thread 开启多线程并且执行,

      但实际上我需要调用算法,算法会返回给我生成的语音长度和语音文件的路径

      所以要想办法获取线程返回值,查资料找到了两种方法

    • 方式一

      • 尝试

      • 结果

        所以可以得知这样是获取不到返回值的

        查看源码

        start方法并没有返回值

        __init__方法中也并没有存储结果的属性

      • 重写Thread类

        由上面可以知道Thread类中是无法获取线程函数返回值的

        所以要重写Thread类

        重新写了__init__run方法和join方法

        此处问题1:为什么重写run方法明明在代码中是start方法开启的

        浅浅研究一下start方法的源码

        可以看到,在不会报错的情况下start方法会调用_start_new_thread方法,参数为_bootstrap,首先查看_start_new_thread方法源码

        虽然没有代码,但是注释上写的会call这个传入function的方法,所以最终是要执行_bootstrap这个方法

        _bootstrap方法最终调用_bootstrap_inner方法

        最终就调用到了run方法

        此处问题2:为什么使用join方法

        线程使用join方法会让主线程等待所有子线程执行完毕后再继续向下执行

        所以我们重新写了join方法,并且在run方法中给对象设置了私有属性,_return这个属性的值就是线程的执行结果,最后在join方法中return出来

      • 重写后代码

      • 结果

    • 方式二

      使用自带的concurrent.futures库

      • 代码

      • 结果

  2. 可以看出,这两种方法都行,所以我们选择第二种更为方便的方法

    实际应用到项目中去

    项目涉及公司机密,不予展示


    END

python获取线程返回值的更多相关文章

  1. Callable 获取线程返回值

    allable与 Future 两功能是Java在兴许版本号中为了适应多并法才增加的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它 ...

  2. Python从线程获取函数返回值

    Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...

  3. Java多线程和并发(四),线程返回值获取方式和Callable接口

    目录 1.主线程等待法 2.使用Thread类的join()阻塞当前线程,等待子线程执行完毕 3.通过Callable接口实现:通过FutureTask Or线程池获取 四.线程返回值获取方式和Cal ...

  4. python os.system()返回值判断

    最近遇到os.system()执行系统命令的情况,上网搜集了一下资料,整理如下,以备不时之需,同时也希望能帮到某些人. 一.python中的 os.system(cmd)的返回值与linux命令返回值 ...

  5. 深入Callable及Runnable两个接口 获取线程返回结果

    今天碰到一个需要获取线程返回结果的业务场景,所以了解到了Callable接口. 先来看下下面这个例子: public class ThreadTest { public static void mai ...

  6. Android平台调用Web Service:线程返回值

    接上文 前文中的遗留问题 对于Java多线程的理解,我曾经只局限于实现Runnable接口或者继承Thread类.然后重写run()方法.最后start()调用就算完事,可是一旦涉及死锁以及对共享资源 ...

  7. Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值

    前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化.如果处理这种网页是还用requests库或者 ...

  8. ascii#ascii,对象类中找__repr__,获取其返回值

    #!/usr/bin/env python #ascii,对象类中找__repr__,获取其返回值 class Foo : def __repr__(self): return "hello ...

  9. Python 基础之返回值与函数使用与局部变量和全局变量locals() 和 globals()

    一.函数的返回值 return return: 自定义返回值,返回到哪里? 返回到函数的[调用处]1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return ...

随机推荐

  1. a commponent required a bean of type XXXXXX that could not be found-2022新项目

    一.问题由来 目前刚入职一家新公司不久,公司的新项目采用DDD驱动领域设计来进行开发,架构这一块使用的是阿里巴巴开源的最新框架COLA4.0的架构. 主要是这个框架里面的分层设计.主要分为四层:ada ...

  2. CSS 不规则的轮廓-outline

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...

  3. Spring Boot配置全局异常捕获

    1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...

  4. linux篇-linux面试题汇总

    Linux经典面试题,看看你会几题? 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统 ...

  5. MTK 平台sensor arch 介绍-hal

    MTK 平台sensor arch 介绍-hal 一:整体框架 二:具体流程简介 AP-HAL: (1)init & control flow 我们以前文的originchannel 的 ac ...

  6. vue面试总结-2022

    1.vue生命周期及各周期得特点 beforCreate 特点: 初始化实例,不能使用data和methods.ref 示例 beforeCreate: function () { console.g ...

  7. Number.prototype.toString()方法

    Number.prototype.toString(radix)方法返回指定基数对应Number的字符串值 radix可选参数,值范围为2~36,转化基数,如果未指定,默认值为10,如果radix值不 ...

  8. 编程式导航路由跳转到当前路由(参数不变), 多次执行会抛出NavigationDuplicated的警告错误?

    注意:编程式导航(push|replace)才会有这种情况的异常,声明式导航是没有这种问题,因为声明式导航内部已经解决这种问题. 这种异常,对于程序没有任何影响的. 为什么会出现这种现象: 由于vue ...

  9. SAP 实例 10 List Box with value list from input help

    *&---------------------------------------------------------------------* *& Report DEMO_DROP ...

  10. 02 java包装类型的缓存机制

    02 java包装类型的缓存机制 Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能. Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,12 ...