python多线程获取子线程任务返回值

今天想实现多线程更新资产信息,所以使用到了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'}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]环境

备注:,将我的博客内容整理成册,首先会在博客里优先发布,后续可能的话整理成电子书,主要从linux的最基础内容开始进入Linux的Mono开发方面的话题。本文是...

2559
来自专栏张善友的专栏

CentOS 7 上部署Mono 4 和Jexus 5.6

概述 在这篇文章中我们将讨论如何在CentOS 7操作系统,安装 jexus、 mono 和 配置 jexus,因此它将能够在这种环境中运行一个asp.net ...

2217
来自专栏技术小讲堂

使用ASP.NET Identity以手机短信实现双重验证创建一个ASP.NET 5项目运行应用程序使用SMS短信进行双重验证开启双重验证使用双重验证登陆应用程序禁用账户来防止暴力破解

这篇文章将展示怎么使用SMS短信启动双重验证 创建一个ASP.NET 5项目 一开始,使用Visual studio 2015创建一个新的ASP.NET Web...

3296
来自专栏葡萄城控件技术团队

.Net 高效开发之不可错过的实用工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内

工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存管...

2126
来自专栏乐沙弥的世界

SQL Server 2012安装错误:Error while enabling Windows feature: NetFx3, Error Code: -2146498298

最近在安装SQL server 2012时,碰到错误:Error while enabling Windows feature: NetFx3, Error C...

1602
来自专栏雨过天晴

原 用u盘制作mac安装盘

1434
来自专栏张善友的专栏

Code-First Migrations随Entity Framework 4.3一同发布

Entity Framework 4.3 版本终于为开发者带来了迁移(Migrations)功能,从此以后使用EF不必依赖于单独预发布的迁移库了。 什么是EF迁...

1849
来自专栏大内老A

[WCF权限控制]ASP.NET Roles授权[上篇]

在采用Windows认证的情况下,使用基于Windows用户组安全主体权限模式是一个不错的选择。我们可以直接使用现有的用户组设置,也可以为相应的应用或服务创建单...

2046
来自专栏贺嘉的专栏

如何用Baas快速在腾讯云上开发小程序之系列2:搭建Phabricator开发管理平台

如何用Baas快速在腾讯云上开发小程序-系列2:搭建Phabricator开发管理平台,步骤包括上传 SSL/TLS 证书、创建 Phabricator 容器、...

9130
来自专栏数据库

ABP.Net Core Entity Framework迁移使用MySql数据库

一、迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下。 二、迁移M...

36110

扫码关注云+社区