例如,我有以下课程:
class CalculatorA:
def functionA(self):
#some calculations
class CalculatorB:
def functionB(self):
#some calculations
class CalculatorC:
def functionC(self):
#some calculations
class Aggregator:
def __init__(self, objectA, objectB, objectC):
self.objectA = objectA
self.objectB = objectB
self.objectC = objectC
def aggregator_function(self):
self.objectA.functionA()
self.objectB.functionB()
self.objectC.functionC()
class Worker(threading.Thread):
def __init__(self,
objectA,
objectB,
objectC):
threading.Thread.__init__(self)
self.objectA = objectA
self.objectB = objectB
self.objectC = objectC
def run(self):
agregator = Aggregator(self.objectA,
self.objectB,
self.objectC)
agregator.aggregator_function()
我的main()
函数:
def main():
objectA = CalculatorA()
objectB = CalculatorB()
objectC = CalculatorC()
worker = Worker(objectA, objectB, objectC)
worker.start()
我在CalculatorA, CalculatorB, CalculatorC
函数中创建main()
类的对象,并将变量作为参数传递
Worker
的构造函数。 Worker
类的对象将其保存。稍后,它将变量传递给Aggregator
函数中run()
对象的构造函数。它在单独的计算线程中创建Aggregator
对象。 Aggregator
调用函数functionA(), functionB(), functionC()
。
我的问题是,将在哪个线程中进行函数functionA(), functionB(), functionC()
的计算?他们会被执行吗
在工作线程中还是在主线程中?如果在主线程中,应该使用threading.local
存储空间吗?
答案 0 :(得分:2)
在调用函数运行的任何线程中调用函数。它们是对象方法,这一点不会改变。
由于从self.objectA.functionA()
调用了aggregator.aggregator_function()
,并且从Worker.run()
方法中调用了它,所以它在Worker
线程中被调用。
答案 1 :(得分:1)
它们都将从工作线程中运行。
您应该可以使用print(threading.get_ident())
之类的方式进行验证。