python获取线程返回值
python获取线程返回值
前言
工作中的需求
将前端传过来的字符串信息通过算法转换成语音,并将语音文件返回回去
由于算法不是我写的,只需要调用即可,但是算法执行速度相当缓慢
我的优化思路是,将前端的字符串按照句号分割,开启相等长度的线程池,并发执行算法
首先判断这种思路是否可行
实现多线程
常用思路为,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库
代码

结果

可以看出,这两种方法都行,所以我们选择第二种更为方便的方法
实际应用到项目中去
项目涉及公司机密,不予展示
END
python获取线程返回值的更多相关文章
- Callable 获取线程返回值
allable与 Future 两功能是Java在兴许版本号中为了适应多并法才增加的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它 ...
- Python从线程获取函数返回值
Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...
- Java多线程和并发(四),线程返回值获取方式和Callable接口
目录 1.主线程等待法 2.使用Thread类的join()阻塞当前线程,等待子线程执行完毕 3.通过Callable接口实现:通过FutureTask Or线程池获取 四.线程返回值获取方式和Cal ...
- python os.system()返回值判断
最近遇到os.system()执行系统命令的情况,上网搜集了一下资料,整理如下,以备不时之需,同时也希望能帮到某些人. 一.python中的 os.system(cmd)的返回值与linux命令返回值 ...
- 深入Callable及Runnable两个接口 获取线程返回结果
今天碰到一个需要获取线程返回结果的业务场景,所以了解到了Callable接口. 先来看下下面这个例子: public class ThreadTest { public static void mai ...
- Android平台调用Web Service:线程返回值
接上文 前文中的遗留问题 对于Java多线程的理解,我曾经只局限于实现Runnable接口或者继承Thread类.然后重写run()方法.最后start()调用就算完事,可是一旦涉及死锁以及对共享资源 ...
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值
前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化.如果处理这种网页是还用requests库或者 ...
- ascii#ascii,对象类中找__repr__,获取其返回值
#!/usr/bin/env python #ascii,对象类中找__repr__,获取其返回值 class Foo : def __repr__(self): return "hello ...
- Python 基础之返回值与函数使用与局部变量和全局变量locals() 和 globals()
一.函数的返回值 return return: 自定义返回值,返回到哪里? 返回到函数的[调用处]1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return ...
随机推荐
- 为什么 io 包一般以 byte 数组做为处理单位?
为什么 io 包一般以 byte 数组做为处理单位? 本文写于 2021 年 9 月 7 日 编程语言中时常会出现 []byte 作为类型的操作.特别是在网络传输或是 io 操作中,例如 socket ...
- 接口测试使用Python装饰器
写接口case时,有时需要对cae做一些共性的操作,最典型的场景如:获取case执行时间.打印log等. 有没有一种办法来集中处理共性操作从而避免在每个case中都写相同的代码(如:每个case都需要 ...
- 【mq】从零开始实现 mq-11-消费者消息回执添加分组信息 pull message ack groupName
前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...
- Go内存管理一文足矣
最早学习C.C++语言时,它们都是把内存的管理全部交给开发者,这种方式最灵活但是也最容易出问题,对人员要求极高:后来出现的一些高级语言像Java.JavaScript.C#.Go,都有语言自身解决了内 ...
- 【算法】希尔排序(Shell Sort)(四)
希尔排序(Shell Sort) 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版.它与插入排序的不同之处在于,它会优先比较距离较远的元素.希尔排序又叫缩小增量排序. ...
- 126_Power BI中使用DAX计算股票RSI及股票均线相关
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前些日子,有朋友在交流股票RSI用DAX处理的问题,由于RSI股票软件的算法几乎都是需要用到股票从上市第一天开始 ...
- 关于ECharts图表反复修改都无法显示的解决方案
解决方案:清空浏览器所有记录,再次刷新即可
- Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景
在上周三下午时,客户.业务和测试人员同时反溃生产环境登录进入不了系统,我亲自测试时,第一次登录进去了,待退出后再登录时,复现了客户的问题,场景像是请求连接被拒绝了,分析后判断是spring boot的 ...
- 看看CabloyJS是如何实现编辑页面脏标记的
应用场景 我们在使用Word.Excel时,当修改了内容之后在标题栏会显示脏标记,从而可以明确的告知用户内容有变动.此外,如果在没有保存的情况下关闭窗口,系统会弹出提示框,让用户选择是否放弃修改 那么 ...
- NPM Error:gyp: No Xcode or CLT version detected!
问题 最近在macOS Catalina中使用npm安装模块,经常会出现如下错误: > node-gyp rebuild No receipt for 'com.apple.pkg.CLTool ...