Python 中从线程获取返回值

这篇具有很好参考价值的文章主要介绍了Python 中从线程获取返回值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


这篇文章首先讨论了线程的基础知识,并提供了一个在Python中启动线程的代码示例。然后,我们将讨论一个在线程中获取函数返回值的代码。

线程是进程内的轻量级执行单元,具有自己的程序执行状态。一个进程可以运行多个线程以实现并发(有时也是并行)。

进程和线程的主要区别在于每个进程都有一个独立的不相交地址空间,而同一进程的多个线程共享单个进程的地址空间。这意味着线程可以使用共享内存进行通信,而无需额外的管道(普通管道或FIFO)或任何消息传递接口。


在Python中使用多线程的HelloWorld程序

考虑以下代码:

from threading import Thread

# 一个线程的函数
def first_function():
    print('Hello World')

print("main program start")

thread_1 = Thread(target=first_function)
thread_2 = Thread(target=first_function)
thread_1.start()
thread_2.start()

print("main ends")

在上面的代码中,首先我们使用 from threading import Thread 语句导入 Thread 类以使用多线程功能。我们定义了一个名为 first_function() 的函数,用于显示 “Hello World”,并使用 Thread() 类实例化了两个线程对象。

我们通过将 first_function() 作为目标函数传递给 Thread() 来创建了两个 Thread() 类的实例。target 属性指定要由 Thread() 执行的函数。

一旦创建了 Thread() 实例,我们可以使用 .start() 方法运行和执行这些线程。

在线程中传递参数给函数

考虑以下代码:

from threading import Thread

def first_function(name, id):
    print('Hello World from', name, "ID=", id)

thread_1 = Thread(target=first_function, args=("Thread 1", 1))
thread_2 = Thread(target=first_function, args=("Thread 2", 2))
thread_1.start()
thread_2.start()

在上面的代码中,我们定义了一个名为 first_function(name, id) 的函数,它接收两个参数 name 和 id。我们使用 args 在 Thread 类中将这些参数作为元组传递。

我们创建了两个 Thread 类对象,并分别将参数 args=("Thread 1", 1)args=("Thread 2", 2) 传递给 thread_1 和 thread_2。然后,我们使用 thread_1.start()thread_2.start() 来运行这些线程。


在Python中从运行在线程中的函数中获取返回值

有多种方法可以从在线程中运行的函数中获取返回值。

传递一个可变对象给函数

我们可以通过将一个可变对象传递给在线程中运行的函数来获取函数的返回值;函数将返回值放在该对象中。考虑以下代码:

from threading import Thread

def first_function(first_argu, return_val):
    print(first_argu)
    return_val[0] = "Return Value from " + first_argu

return_val_from_1 = [None] * 1
return_val_from_2 = [None] * 1

thread_1 = Thread(target=first_function, args=("Thread 1", return_val_from_1))
thread_2 = Thread(target=first_function, args=("Thread 2", return_val_from_2))

thread_1.start()
thread_2.start()

thread_1.join()
thread_2.join()

print(return_val_from_1)
print(return_val_from_2)

上面的代码定义了一个名为 first_function 的函数,它接收两个参数 first_argu 和 return_val。first_function 显示 first_argu 的值,并将返回值放在 return_val 的索引 0 处。

我们使用 Thread 类创建线程,并传递两个参数,包括一个列表 args=("Thread 1", return_val_from_1)args=("Thread 2", return_val_from_2) 分别给 thread_1 和 thread_2。return_val_from_1 和 return_val_from_2 用于获取函数的返回值。

thread_1.join()thread_2.join() 用于等待主程序完成这两个线程。

让我们看一下上述代码片段的输出:

python获取线程的返回值,Python 实用技巧,python,java,开发语言

使用 join 方法

join 方法是另一种从在线程中获取返回值的方法。考虑以下代码:

from threading import Thread

def first_function(first_argu):
    print(first_argu)
    return "Return Value from " + first_argu

class NewThread(Thread):
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs={}):
        Thread.__init__(self, group, target, name, args, kwargs)
    def run(self):
        if self._target != None:
            self._return = self._target(*self._args, **self._kwargs)
    def join(self, *args):
        Thread.join(self, *args)
        return self._return

thread_1 = NewThread(target=first_function, args=("Thread 1",))
thread_2 = NewThread(target=first_function, args=("Thread 2",))

thread_1.start()
thread_2.start()

print(thread_1.join())
print(thread_2.join())

在上面的代码中,我们定义了一个名为 NewThread 的自定义类,它是 Thread 类的子类。我们重新定义了 run 和 join 方法。

一旦我们创建并启动了一个线程,join() 方法将返回从 first_function 返回的值。

以下是上述代码的输出:

python获取线程的返回值,Python 实用技巧,python,java,开发语言文章来源地址https://www.toymoban.com/news/detail-729756.html

到了这里,关于Python 中从线程获取返回值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python实战应用讲解-【numpy数组篇】实用小技巧(八)(附python示例代码)

    目录   如何在NumPy数组上映射一个函数 方法一:numpy.vectorize()方法 方法2:使用lambda函数 方法3:用一个数组作为函数的参数来映射一个NumPy数组 如何使用给定的索引位置重新排列二维NumPy数组的列 如何用NumPy删除只包含0的数组行 如何删除Numpy数组中包含非数字值的列

    2024年02月01日
    浏览(37)
  • python实战应用讲解-【numpy数组篇】实用小技巧(五)(附python示例代码)

    目录   查找两个NumPy数组的并集 查找NumPy数组中的唯一行 扁平化 一个NumPy数组的列表 使用NumPy在Python中扁平化一个矩阵 从元素上获取NumPy数组值的幂 为了找到两个一维数组的联合,我们可以使用Python Numpy库的函数numpy.union1d()。它返回唯一的、经过排序的数组,其值在两个输

    2023年04月14日
    浏览(32)
  • 轻松驾驭Python格式化:5个F-String实用技巧分享

    F-String (格式化字符串字面值)是在Python 3.6中引入的,它是一种非常强大且灵活的字符串格式化方法。 它允许你在字符串中嵌入表达式,这些表达式在运行时会被求值并转换为字符串, 这种特性使得 F-String 在编写 Python 代码时能够更简洁、更直观地处理字符串。 本文总结了

    2024年03月12日
    浏览(42)
  • Python实用技巧:Pandas--DataFrame--筛选和删除含特定值的行与列

    Python实用技巧:Pandas–DataFrame–筛选和删除含特定值的行与列 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得到您的订阅和支持~ 💡 创作高质量博文,分享更多关于深度学习、PyT

    2024年04月13日
    浏览(32)
  • C#多线程精解:优雅终止线程的实用方法与技巧

      概述: 在C#多线程编程中,合理终止线程是关键挑战。通过标志位或CancellationToken,实现安全、协作式的线程终止,确保在适当时机终止线程而避免资源泄漏。 在C#多线程编程中,有时需要终止正在运行的线程,例如在用户取消操作、程序关闭等情况下。 线程终止通常涉及

    2024年02月19日
    浏览(28)
  • 【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)

    微信小程序中使用 echarts 需使用官方提供的 ec-canvas 组件 点击下方链接,下载 ec-canvas 组件 https://gitcode.net/mirrors/ecomfe/echarts-for-weixin/-/tree/master 将其中的 ec-canvas 文件夹拷贝到微信小程序的分包中 ( 因 ec-canvas 组件较大,约 1M,若放在主包中很容易超出 2M 的大小限制,不了解

    2024年02月09日
    浏览(41)
  • 【linux c多线程】线程的创建,线程信息的获取,获取线程返回值

    ​ 专栏内容 : 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的情况下对故障容灾的支持。 手写数据库toadb 本专栏主要介绍如何从零开发,开发的

    2024年02月04日
    浏览(26)
  • C++ 多线程编程(三) 获取线程的返回值——future

    C++11标准库增加了获取线程返回值的方法,头文件为future,主要包括 future 、 promise 、 packaged_task 、 async 四个类。 那么,了解一下各个类的构成以及功能。 future是一个模板类,它是传输线程返回值(也称为 共享状态 )的媒介,也可以理解为线程返回的结果就安置在future中。

    2024年02月02日
    浏览(35)
  • chrome-实用技巧

    重发请求,这有一种简单到发指的方式 选中 Network 点击 Fetch/XHR 选择要重新发送的请求 右键选择 Replay XHR  但是经过实际使用调研,发现它只适用于axios或类似方式使用xhr api,则XHR仍在重放,但是,如果使用新的api fetch,则需要使用其他方法,如下:  此方式还可以直接修改

    2024年02月05日
    浏览(32)
  • Greenplum实用技巧

    gp_segment_id是表中的隐藏列,用来标记该行属于哪个segment节点。因此可以基于该隐藏列进行分组查询,获取每个segment的记录数,从而判断表数据的分布是否均匀或有倾斜。 gp_segment_configuration是一张系统表,它维护包括master、standby在内的所有节点信息。是DBA了解集群最直观的

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包