Python 多线程 类 return 值

Python multithreading with Classes that return values

所以我知道 Python 中的基本线程是如何工作的,但这是我的问题:

  1. 我有两个自定义 python 模块,每个 return 一个值(一个 return 是字典,另一个是日期时间对象)
  2. 我正在将它们导入到第三个 py 脚本文件(使用导入函数),该文件使用这些 returned 值
  3. 两个模块互不依赖
  4. return字典中的一个花费的时间是另一个的两倍(这就是出现此问题的原因)。
  5. 两个自定义模块都绑定在 Class 和 __init__ 内,所以它是这样的:
Class A:
    def __init__(self, var1, var2):
        // the regular self.var assignments
        
    def Aa(self):
        // process the input values
        return dict_value

Class B:
    def __init__(self, var3):
        // the regular self.var assignments
        
    def Bb(self):
        // process the input values
        return datetime_object

我为什么要写这些?继续阅读:

当然,因为一个功能比另一个功能花费的时间更长,我想优化程序。我正在尝试实现线程,但由于我的模块是从外部导入的,加上它们 return 值的事实,我发现它有点挑战。我最接近的是这个答案: - 基本上是这部分:

from threading import Thread
from Queue import Queue

def func1(x):
    return [i*i for i in x]

def func2(x):
    return [i*i*i for i in x]

nums = [1,2,3,4,5]

def wrapper(func, arg, queue):
    queue.put(func(arg))

q1, q2 = Queue(), Queue()
Thread(target=wrapper, args=(func1, nums, q1)).start() 
Thread(target=wrapper, args=(func2, nums, q2)).start() 

print q1.get(), q2.get()

没问题,但我不知道如何在包装函数中传递参数。因为我在 class 中使用了 init,所以我在 class 本身中传递参数,然后调用其中的定义。我似乎不知道该怎么做。

例如,这是我正在做的,但它不起作用(很明显): Thread(target=wrapper, args=(A(var1, var2).Aa, q1)).start()

错误显示为“TypeError:wrapper() 缺少 1 个必需的位置参数:'queue'

即使我很早就声明了参数(比如 nums 是如何声明的),args 如何知道将值传递到哪里?我没听懂。

提前致谢。

看起来您需要一个不同的 wrapper 函数来调用方法 AaBb,因为它们没有这样的参数:

def wrapper(func, queue):
    queue.put(func())

q1, q2 = Queue(), Queue()
Thread(target=wrapper, args=(A(var1, var2).Aa, q1)).start() 
Thread(target=wrapper, args=(B(var3).Bb, q2)).start() 

print q1.get(), q2.get()