今天想实现多线程更新资产信息,所以使用到了threading,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装


def auto_asset(node):
ret = salt.remote_grains_execution_sigle(node)
asset_info={}
asset_info['os']= ret[node]['oscodename']
asset_info['kernelrelease']= ret[node]['kernelrelease']
asset_info['cpu_model']= ret[node]['cpu_model']
asset_info['dns']= ','.join(ret[node]['dns']['ip4_nameservers'])
asset_info['serialnumber'] = ret[node]['serialnumber']
asset_info['virtual'] = ret[node]['virtual']
asset_info['localhost'] = ret[node]['localhost']
asset_info['mem_total'] = ret[node]['mem_total']
asset_info['num_cpus'] = ret[node]['num_cpus']
asset_info['ip4_interfaces'] = " ".join(ret[node]['ip4_interfaces']['eth0'])
asset_info['hwaddr_interfaces'] = ret[node]['hwaddr_interfaces']['eth0']
return asset_info import threading class MyThread(threading.Thread): def __init__(self,func,args=()):
super(MyThread,self).__init__()
self.func = func
self.args = args def run(self):
self.result = self.func(*self.args) def get_result(self):
try:
return self.result # 如果子线程不使用join方法,此处可能会报没有self.result的错误
except Exception:
return None ass =Asset.objects.all()
ids_list =[ i.inner_ip for i in ass]
files = range(len(ids_list))
t_list = []
t_data = []
for i in files:
t = MyThread(auto_asset, (ids_list[i],))
t_list.append(t)
t.start()
for t in t_list:
t.join() # 一定要join,不然主线程比子线程跑的快,会拿不到结果
t_data.append(t.get_result())
print(t.get_result())

执行结果

{'localhost': 'VM_75_82_centos', 'hwaddr_interfaces': '52:54:00:95:fe:c8', 'disks': {'/dev/vda1': {'total': '49.09G', 'capacity': '17%', 'avail': '38.96', 'used': '7.63'}}, 'dns': '10.236.158.106,10.236.158.114', 'ip4_interfaces': '10.105.75.82', 'num_cpus': 1, 'serialnumber': 'a1dad25c-8e69-4838-a489-0fe1958e76df', 'os': 'CentOS Linux 7 (Core)', 'mem_total': 1839, 'cpu_model': 'Intel(R) Xeon(R) CPU E5-26xx v4', 'kernelrelease': '3.10.0-514.26.2.el7.x86_64', 'virtual': 'kvm'}
{'localhost': 'wordpress', 'hwaddr_interfaces': 'fa:16:3e:1a:49:72', 'disks': {'/dev/vda1': {'total': '29.99G', 'capacity': '12%', 'avail': '26.54', 'used': '3.45'}}, 'dns': '103.224.222.222,103.224.222.223,8.8.8.8', 'ip4_interfaces': '192.168.0.3', 'num_cpus': 1, 'serialnumber': 'c6bce500-113d-11e7-a010-0425c53afb57', 'os': 'CentOS Linux 7 (Core)', 'mem_total': 1839, 'cpu_model': 'Intel Core Processor (Broadwell, IBRS)', 'kernelrelease': '3.10.0-514.el7.x86_64', 'virtual': 'kvm'}

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

  1. Java多线程——<四>让线程有返回值

    一.概述 到目前为止,我们已经能够声明并使一个线程任务运行起来了.但是遇到一个问题:现在定义的任务都没有任何返回值,那么加入我们希望一个任务运行结束后告诉我一个结果,该结果表名任务执行成功或失败,此时 ...

  2. asp.net 父窗体获取子窗体的返回值,可用来对父窗体局部更新

    今天在项目上遇到了这个问题,其实只是window.returnValue的简单应用,不是asp.net的专属内容.作为积累,记录一个简单的实现模型. 图1  用到的文件 从图1中我们可以看到,只用到了 ...

  3. 20150812 Asp.net 父窗体获取子窗体的返回值,更新父窗体文本控件(应用)

    1. 父窗体 **************************************** using System;using System.Collections;using System.C ...

  4. python使用threading获取线程函数返回值的实现方法

    python使用threading获取线程函数返回值的实现方法 这篇文章主要介绍了python使用threading获取线程函数返回值的实现方法,需要的朋友可以参考下 threading用于提供线程相 ...

  5. Python多线程获取返回值

    在使用多线程的时候难免想要获取其操作完的返回值进行其他操作,下面的方法以作参考: 一,首先重写threading类,使其满足调用特定的方法获取其返回值 import threading class M ...

  6. ARTS-S 获取子线程返回值注意事项

    #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h& ...

  7. [Python]获取子线程异常信息

    起因 今天在写东西的时候,用到了多线程.遇到了个问题: 子线程的异常,在父线程中无法捕获. 解决 问题代码 问题代码示例代码如下: import threading class SampleThrea ...

  8. C++11获取线程的返回值

    C++11 std::future and std::promise 在许多时候,我们会有这样的需求--即我们想要得到线程返回的值. 但是在C++11 多线程中我们注意到,std::thread对象会 ...

  9. JAVA 多线程 Callable 与 FutureTask:有返回值的多线程

    java多线程中,如果需要有返回值,就需要实现Callable接口. 看例子: 先建立一个Dowork这个类,就是平时某个业务的实现 package com.ming.thread.one; impo ...

随机推荐

  1. cdnbest里如何查看网站是否被缓存

    比如开启了强制缓存,如何查看缓存是否生效 本例以firefox浏览器查看,先打开浏览器,按下F12, 然后在浏览器是输入网址访问 如下图响应头里的 x-cache显示 Miss  from 就是没有缓 ...

  2. cdnbest节点动态ip配置教程

    1.安装节点后,在未初始化里初始化节点,如下图操作,要选择动态ip(注:动态ip节点不支持添加辅ip) 服务器如果是动态ip,选择了动态ip选项,节点在自动更换了新的ip后,在节点列表里的ip和dns ...

  3. cdnbest设置301跳转

     cdnbest设置301跳转  格式:^http://kangleweb.com/(.*)$   https://www.kangleweb.com/$1  下面是站点里所有域名都跳转到https ...

  4. 将python、pip 加入环境变量

    加python: CMD里输:    path=%path%;C:\Python27 其中   C:\Python27  为python的exe所在的文件夹 加pip: CMD里输:    path= ...

  5. mysql授权远程访问

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION; Query O ...

  6. python--第十天总结(IO多路复用)

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...

  7. git 使用遇到的问题

    本博客只记录遇到的问题和解决方案 问题一:git上与本地不同步无法上传 先git pull origin master再git push -u origin master(实在不行或者清空本地,或者清 ...

  8. 查看windows上次开机时间

    首先在电脑上找的[计算机]图标,点击鼠标右键弹出下拉菜单,在下拉菜单里找到[管理]选项 点击下拉菜单里的[管理]选项,弹出计算机管理界面,在左侧菜单栏里的系统工具里可以看到[事件查看器]菜单 点击[时 ...

  9. java 小心使用float和double他可能不如你所想

    public static void main(String[] args) { double funds=1.00; ; // ; ;funds>=price;price+=.){ funds ...

  10. 安装bazel(syntaxnet依赖工具)

    1.简介   Bazel是一个类似于Make的工具,是Google为其内部软件开发的特点量身定制的工具,如今Google使用它来构建内部大多数的软件.它的功能有诸多亮点: 多语言支持:目前Bazel默 ...