[英]Python multithreading with Classes that return values
所以我知道 Python 中的基本线程是如何工作的,但这是我的问题:
__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 来调用方法Aa
和Bb
因为它们没有 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.