Python如何获取多线程返回结果

目录
  • Python获取多线程返回结果
  • Python多线程实现

Python获取多线程返回结果

在 Python 的多线程中,有时候我们会需要每一个线程中返回的结果。

然而,在经过我的多番尝试、以及网上各种博客显示,在 Python3 中是无法获得单个线程中返回的结果的,因此我们需要定义一个类来实现这个过程

这个类的定义如下:

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
        except Exception:
            return None

然后我们就可以通过调用这个类里的函数,get_result() 来获取每个线程中返回的结果了,以下是一个测试的实例,多线程调用一个相加的函数,经过实验,是能够获取到所有线程返回的结果的。

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
        except Exception:
            return None
def add(num):
    result = num + 5
    return result
if __name__ == '__main__':
    data = []
    threads = []
    nums = [1, 2, 3]
    for num in nums:
        t = MyThread(add, args = (num, ))
        threads.append(t)
        t.start()
    for t in threads:
        t.join()
        data.append(t.get_result())
    print(data)

Python多线程实现

from threading import Thread
def func():
    for i in range(100):
        print('func',i)
if __name__ == '__main__':
    t=Thread(target=func)
    t.start()
    for i in range(100):
        print('main',i)

线程池:

  • 一次性开辟一些线程,我们用户直接给线程池子提交任务,线程任务的调度交给线程池。
from concurrent.futures import ThreadPoolExecutor
def func(name):
    for i in range(20):
        print(name,i)
if __name__ == '__main__':
    #创建线程池
    with ThreadPoolExecutor(10) as t:
        for i in range(10):
            t.submit(func,name=f'线程{i}')
    print('over')#等待线程全部执行完毕,才会执行该行代码

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python多进程和多线程介绍

    目录 一.什么是进程和线程 二.多进程和多线程 三.python中的多进程和多线程 1.多进程 2.多线程 一.什么是进程和线程 进程是分配资源的最小单位,线程是系统调度的最小单位. 当应用程序运行时最少会开启一个进程,此时计算机会为这个进程开辟独立的内存空间,不同的进程享有不同的空间,而一个CPU在同一时刻只能够运行一个进程,其他进程处于等待状态. 一个进程内部包括一个或者多个线程,这些线程共享此进程的内存空间与资源.相当于把一个任务又细分成若干个子任务,每个线程对应一个子任务. 二.多进程和

  • python实现多线程并得到返回值的示例代码

    目录 一.带有返回值的多线程 1.1 实现代码 1.2 结果 二.实现过程 2.1 一个普通的爬虫函数 2.2 一个简单的多线程传值实例 2.3 实现重点 四.学习 一.带有返回值的多线程 1.1 实现代码 # -*- coding:utf-8 -*- """ 作者:wyt 日期:2022年04月21日 """ import threading import requests import time urls = [ f'https://www.

  • python多线程实现动态图绘制

    目录 一.背景 二.步骤 1.使用matplotlib绘制动态图 2.创建一个线程用于更新数据 三.代码框架 一.背景 有些情况下,我们面对实时更新的数据,希望能够在一个窗口中可视化出来,并且能够实时更新,方便我们观察数据的变化,从而进行数据分析,例如:绘制音频的波形,绘制动态曲线等,下面介绍使用matplotlib结合多线程绘制动态图,希望能帮助到有需要的朋友. 遇到的场景:最近刚好在学习人工智能中的遗传算法,并且使用该算法求解TSP,了解这个算法的朋友知道这个算法是通过不断迭代,寻找适应度大

  • python 多线程threading程序详情

    CPython implementation detail: 在 CPython 中,由于存在全局解释器锁, 同一时刻只有一个线程可以执行 Python 代码(虽然某些性能导向的库可能会去除此限制). 如果你想让你的应用更好地利用多核心计算机的计算资源,推荐你使用multiprocessing或concurrent.futures.ProcessPoolExecutor但是,如果你想要同时运行多个 I/O 密集型任务,则多线程仍然是一个合适的模型. 再来引入一个概念: 并行(parallelis

  • Python多线程的使用详情

    目录 一,实用方法 二.补充:Python多线程共享变量资源竞争问题 一,实用方法 1.线程之间执行是无序的,cpu调度哪个线程就执行哪个线程: 2.主线程等待所有子线程结束后再结束,设置守护线程可以实现当主线程结束时子线程立马结束: 3.设置守护线程:1.threading.Thread(daemon=True),2.线程对象.setDaemon(True): 4.线程之间共享全局变量,存在资源竞争问题. ''' 线程之间执行是无序的,cpu调度哪个线程就执行哪个线程 主线程会等待所有子线程结

  • Python如何获取多线程返回结果

    目录 Python获取多线程返回结果 Python多线程实现 Python获取多线程返回结果 在 Python 的多线程中,有时候我们会需要每一个线程中返回的结果. 然而,在经过我的多番尝试.以及网上各种博客显示,在 Python3 中是无法获得单个线程中返回的结果的,因此我们需要定义一个类来实现这个过程 这个类的定义如下: class MyThread(threading.Thread):     def __init__(self, func, args = ()):         sup

  • python获取多线程及子线程的返回值

    最近有个需求,用多线程比较合适,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 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(

  • Python中执行存储过程及获取存储过程返回值的方法

    本文实例讲述了Python中执行存储过程及获取存储过程返回值的方法.分享给大家供大家参考,具体如下: 在Pathon中如何执行存储过程呢?可以使用如下方法: 存储过程定义基本如下: ALTER procedure [dbo]. [mysp] @Station varchar ( 50), @SN varchar ( 50), @Info varchar ( 500) output , @Msg varchar ( 500) output 1. 使用adodbapi from adodbapi i

  • 详解Python获取线程返回值的三种方式

    目录 方法一 方法二 方法三 最后的话 提到线程,你的大脑应该有这样的印象:我们可以控制它何时开始,却无法控制它何时结束,那么如何获取线程的返回值呢?今天就分享一下自己的一些做法. 方法一 使用全局变量的列表,来保存返回值 ret_values = [] def thread_func(*args):     ...     value = ...     ret_values.append(value) 选择列表的一个原因是:列表的 append() 方法是线程安全的,CPython 中,GI

  • Python实时获取cmd的输出

    最近发现一个问题,一个小伙儿写的console程序不够健壮,监听SOCKET的时候容易崩,造成程序的整体奔溃,无奈他没有找到问题的解决办法,一直解决不了,可是这又是一个监控程序,还是比较要紧的,又必须想办法解决. (这是要搞死我的节奏啊....)由于个人不太懂他用的语言,只能在程序外围想办法. 环境描述: 1. 目标程序执行时会监听8080端口,TCP,并在每一次client连接后通过console输出client的IP地址. 2. 监听不是一次性完成的,而是一直监听,程序并不会退出 3. 为了

  • Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例

    本文实例讲述了Python实现基于多线程.多用户的FTP服务器与客户端功能.分享给大家供大家参考,具体如下: 项目介绍: 1. 用户加密认证 2. 允许同时多用户登录 3. 每个用户有自己的家目录 ,且只能访问自己的家目录 4. 对用户进行磁盘配额,每个用户的可用空间不同 5. 允许用户在ftp server上随意切换目录 6. 允许用户查看当前目录下文件 7. 允许上传和下载文件,保证文件一致性 8. 文件传输过程中显示进度条 实现的原理: 服务器端启用端口监听,并对每一连接启用一个线程,对用

  • Python进阶之多线程的实现方法总结

    目录 线程 Python中的多线程 threading.Thread () 创建线程 继承 threading.Thread 类的线程创建 主线程 使用daemon参数控制过程 使用.join()阻塞线程 线程同步 threading中的锁 结语 线程 想要理解线程的含义,首先我们先看一下百度百科的定义: 线程(英语:thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执

  • 基于Python Shell获取hostname和fqdn释疑

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Linux系统内设置hostname很简单,如: $ hostname florian 如果要设置fqdn的话,需要对/etc/hosts进行配置. $ cat /etc/hosts 127.0.0.1 localhost 192.168.1.1 florian.test.com florian /et

  • python中的多线程实例教程

    本文以实例形式较为详细的讲述了Python中多线程的用法,在Python程序设计中有着比较广泛的应用.分享给大家供大家参考之用.具体分析如下: python中关于多线程的操作可以使用thread和threading模块来实现,其中thread模块在Py3中已经改名为_thread,不再推荐使用.而threading模块是在thread之上进行了封装,也是推荐使用的多线程模块,本文主要基于threading模块进行介绍.在某些版本中thread模块可能不存在,要使用dump_threading来代

随机推荐