在Python中如何从线程获取返回值?

2024-04-26 09:29:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中执行一些计算开销很大的任务,并找到了用于并行化的线程模块。我有一个函数,它进行计算并返回一个ndarray作为结果。现在我想知道如何并行化我的函数并从每个线程返回计算的数组。在

下面的例子通过光函数和计算得到了很好的简化。在

import numpy as np

def calculate_result(input):
    a=np.linspace(1.0, 1000.0, num=10000)   # just an example
    result = input*a
  return(result)

input =[1,2,3,4]

for i in range(0,len(input(i))):
    t.Thread(target=calculate_result, args=(input))
    t. start()  
    #Here I want to receive the return value from the thread

我正在寻找一种方法来从线程/函数中获取每个线程的返回值,因为在我的任务中,每个线程计算的值不同。在

我发现了另一个问题(how to get the return value from a thread in python?),其中有人正在寻找类似的问题(没有ndarrays),它是用ThreadPool和async处理的。。。在

-------------------------------------------------------------------------------在

谢谢你的回答! 由于您的帮助,我现在正在寻找一种方法来解决我的问题与多处理模块。为了让你更好地理解我的工作,请看我下面的解释。在

说明:

我的“input_data”是一个包含282240个uint32类型元素的ndarray

在“calculation_function()”中,我使用for循环进行计算 每12位生成一个结果并将其放入“输出数据”

因为这很慢,所以我把输入的数据分成4或8 parts并在calculation\u function()中计算每个part。在

现在我正在寻找一种方法,如何并行化4或8函数 电话

数据的顺序是基本的,因为数据是在图像和 每个像素必须在正确的位置。So函数调用1 计算第一个和最后一个函数调用的最后一个像素 图像。在

计算工作正常,图像可以完全重建 从我的算法,但我需要并行化,以加快时间 关键方面。在

摘要: 一个输入数据被分成4个或8个部分。每个部分的值为70560或35280 uint32。我从每12位计算一个像素和4或8个函数调用。每个函数返回一个带有188160或94080像素的ndarray。所有返回值都将放在一行中,并重塑为图像。在

allready的工作原理: 计算已经准备好了,我可以重建我的图像

问题: 函数调用是连续的,在一行中完成,但是每次图像重建都非常慢

主要目标: 通过并行化函数调用来加速函数调用。在

代码:

^{pr2}$

请不要在意我的初学者编程风格:) 只是在寻找一个解决方案,如何将函数调用与多处理模块并行化,并返回返回ndarray。在

非常感谢你的帮助!在


Tags: 模块the数据方法函数图像inputreturn
2条回答

kar的答案是可行的,但是请记住,他使用的是.dummy模块,这可能会受到GIL的限制。以下是关于它的更多信息: multiprocessing.dummy in Python is not utilising 100% cpu

您可以使用多处理模块中的进程池

        def test(a):
           return a

        from multiprocessing.dummy import Pool
        p = Pool(3)
        a=p.starmap(test, zip([1,2,3]))
        print(a)
        p.close()
        p.join()

相关问题 更多 >