如何线程化 python 中具有两个返回值的函数
How to thread a function in python that has two returned values
我有一个 python 函数,需要用户输入一组数据;此时该函数对数据进行处理并生成两个返回给主程序的数组。在这个问题中,我提供了一个大大简化的示例,希望能从中征求一些建议或帮助。我创建了一个名为 "Test_Function" 的函数,它要求程序员提供一个名为 "Array" 的数据数组,在本例中,它的长度为 5000。该函数处理数据并生成两组名为"Result1"和"Result2"在主程序中作为变量"Res1"和"Res2"返回给用户。我想将函数线程化,以便函数 "Test_Function" 这样一个线程将在输入数组的一半上工作,另一个线程将在另一半上工作,然后在主程序中将它们组合在一起输出数组 "Result1" 和 "Result2"/"Res1" 和 "Res2"。我描述了一个场景,我将生成两个线程,但我想让它足够通用,以便它可以 运行 用户定义的线程数。我如何使用线程功能来做到这一点?
import numpy as np
def Test_Function(Array):
Result1 = Array*np.pi*(1-Array)
Result2 = Array+478.5 + (1/Array)
return(np.array(Result1,dtype=float), np.array(Result2,dtype=float))
#---------------------------------------------------------------------------
if __name__ == "__main__":
Dependent_Array = np.linspace(1.0,5000.0,num=5000)
Res1, Res2 = Test_Function(Dependent_Array)
# eof
您可以使用线程池来分配异步任务:
import numpy as np
from multiprocessing.pool import ThreadPool
def sub1(Array):
return Array * np.pi * (1-Array)
def sub2(Array):
return Array + 478.5 + (1/Array)
def Test_Function(Array):
pool = ThreadPool(processes=2)
res1 = pool.apply_async(sub1, (Array,))
res2 = pool.apply_async(sub2, (Array,))
return (np.array(res1.get(),dtype=float), np.array(res2.get(),dtype=float))
if __name__ == "__main__":
Dependent_Array = np.linspace(1.0,5000.0,num=5000)
Res1, Res2 = Test_Function(Dependent_Array)
这个模块没有很好的文档记录,但是,基本上,它创建了一个工作池,您可以将子例程分配给它来执行。 apply_async
创建的结果对象的方法get()
只有在相应的线程完成操作后才会return结果。
我有一个 python 函数,需要用户输入一组数据;此时该函数对数据进行处理并生成两个返回给主程序的数组。在这个问题中,我提供了一个大大简化的示例,希望能从中征求一些建议或帮助。我创建了一个名为 "Test_Function" 的函数,它要求程序员提供一个名为 "Array" 的数据数组,在本例中,它的长度为 5000。该函数处理数据并生成两组名为"Result1"和"Result2"在主程序中作为变量"Res1"和"Res2"返回给用户。我想将函数线程化,以便函数 "Test_Function" 这样一个线程将在输入数组的一半上工作,另一个线程将在另一半上工作,然后在主程序中将它们组合在一起输出数组 "Result1" 和 "Result2"/"Res1" 和 "Res2"。我描述了一个场景,我将生成两个线程,但我想让它足够通用,以便它可以 运行 用户定义的线程数。我如何使用线程功能来做到这一点?
import numpy as np
def Test_Function(Array):
Result1 = Array*np.pi*(1-Array)
Result2 = Array+478.5 + (1/Array)
return(np.array(Result1,dtype=float), np.array(Result2,dtype=float))
#---------------------------------------------------------------------------
if __name__ == "__main__":
Dependent_Array = np.linspace(1.0,5000.0,num=5000)
Res1, Res2 = Test_Function(Dependent_Array)
# eof
您可以使用线程池来分配异步任务:
import numpy as np
from multiprocessing.pool import ThreadPool
def sub1(Array):
return Array * np.pi * (1-Array)
def sub2(Array):
return Array + 478.5 + (1/Array)
def Test_Function(Array):
pool = ThreadPool(processes=2)
res1 = pool.apply_async(sub1, (Array,))
res2 = pool.apply_async(sub2, (Array,))
return (np.array(res1.get(),dtype=float), np.array(res2.get(),dtype=float))
if __name__ == "__main__":
Dependent_Array = np.linspace(1.0,5000.0,num=5000)
Res1, Res2 = Test_Function(Dependent_Array)
这个模块没有很好的文档记录,但是,基本上,它创建了一个工作池,您可以将子例程分配给它来执行。 apply_async
创建的结果对象的方法get()
只有在相应的线程完成操作后才会return结果。