繁体   English   中英

Python 多线程与返回值的类

[英]Python multithreading with Classes that return values

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

  1. 我有两个自定义 python 模块,每个模块都返回一个值(一个返回字典,另一个返回日期时间对象)
  2. 我将它们导入到第三个 py 脚本文件(使用 import 函数),它利用这些返回值
  3. 这两个模块不相互依赖。
  4. 返回字典的那个花费的时间是另一个的两倍(这就是这个问题出现的原因)。
  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

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

自然,由于一旦 function 比另一个花费更长的时间,我想优化程序。 我正在尝试实现线程,但由于我的模块是从外部导入的,加上它们返回值的事实,我发现它有点挑战性。 我最接近的是这个答案: https://stackoverflow.com/a/22177060/1725974 - 基本上这部分:

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()

这没关系,但我无法弄清楚如何在包装器 function 中传递 arguments。 由于我在 class 中使用了 init,因此我在 class 本身中传递了 arguments,然后在其中调用定义。 我似乎无法弄清楚我该怎么做。

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

错误显示“ TypeError: wrapper() missing 1 required positional argument: 'queue'

即使我很早就声明了 arguments (就像如何声明nums一样), args怎么知道将值传递到哪里? 我没有得到这个。

提前致谢。

看起来您需要一个不同的wrapper function 来调用方法AaBb因为它们没有 arguments :

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM