python使用threading获取线程函数返回值的实现方法
python使用threading获取线程函数返回值的实现方法
这篇文章主要介绍了python使用threading获取线程函数返回值的实现方法,需要的朋友可以参考下
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复、中断。
threading模块提供的类:
Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer,
local。
threading 模块提供的常用方法:
threading.currentThread(): 返回当前的线程变量。
threading.enumerate():
返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount():
返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
threading 模块提供的常量:
threading.TIMEOUT_MAX 设置threading全局超时时间。
好了,正文开始:
最近需要用python写一个环境搭建工具,多线程并行对环境各个部分执行一些操作,并最终知道这些并行执行的操作是否都执行成功了,也就是判断这些操作函数的返回值是否为0。但是threading并没有显式的提供获取各个线程函数返回值的方法,只好自己动手,下面就介绍一下自己的实现方式。
一开始考虑到执行的操作可能有很多,而且后续会不断补充,因此先写了一个通用的多线程执行类,封装线程操作的基本方法,如下:
import threading
class MyThread(object):
MyThread类会接受一个func_list参数,每个元素是一个dict,有func和args两个key,func是真正要执行的函数引用,args是函数的参数。其中最主要的方法是start方法,会多线程执行每个func,然后一直等到所有线程都执行结束后退出。接下来的关键就是如何对self.ret_flag设置正确的值,以判断所有的线程函数是否都返回0了。
我的实现是,在MyThread
class中写一个方法trace_func,作为直接的线程函数,这个trace_func中执行真正需要执行的函数,从而可以获取到该函数的返回值,设置给self.ret_flag。
这个trace_func的第一参数是要执行的func引用,后面是这个func的参数,具体代码如下:
def start(self):
这样能够成功获得返回值了,实验:
def func1(ret_num):
def func2(ret_num):
def func3():
mt = MyThread()
g_func_list = []
g_func_list.append({"func":func1,"args":(1,)})
g_func_list.append({"func":func2,"args":(2,)})
g_func_list.append({"func":func3,"args":None})
mt.set_thread_func_list(g_func_list)
mt.start()
print "all thread ret : %d" % mt.ret_flag
最后的输出结果
func1 ret:1
func2 ret:2
func3 ret:100
all thread ret : 103
总结
以上所述是小编给大家介绍的python使用threading获取线程函数返回值的实现方法,希望对大家有所帮助
相关文章
- 探索 Python、机器学习和 NLTK 库
- Python判断文件是否存在的三种方法
- python字符串使用方法归纳
- Python函数之计算规则图形的面积
- python 下载.whl 文件,查看已安装软件包方法
- python使用threading获取线程函数返回值的实现方法
- 【Python五篇慢慢弹(4)】模块异常谈python
- Python实现计算圆周率π的值到任意位的方法示例
- Py之docx:Python库之docx简介、安装、使用方法详细攻略
- Python:利用python编程实现三维图像绘制展示(六面体旋转、三维球柱状体、下雪场景等)
- Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略
- Python语言学习:Python随机生成那些事之随机生成使用方法、案例应用之详细攻略
- Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法
- Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
- Python语言学习之文件格式后缀那些事:python和常见各种文件格式后缀介绍、使用方法之详细攻略
- Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略
- Py之h5py:Python库之h5py库的简介、安装、使用方法详细攻略
- Py之twisted:Python库之twisted简介、安装、使用方法等详细攻略
- Python:Python多种集成开发环境(IDE,编译器)的简介、安装、入门、使用方法之详细攻略
- 已解决2.Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and wi
- Python零基础入门篇㉕〗- Python字典的常用方法
- Python从零到壹丨详解图像平滑的两种非线性滤波方法
- Python全栈之路:字典dict常用方法
- 【python】Python实现网络爬虫demo实例
- elasticsearch python 查询的两种方法
- Python常用内置函数(python 3.x)