在 Python 中的 class 中线程化多个方法
Threading multiple methods within a class in Python
我想对 运行 多个方法同时使用线程。但是,当我 运行 以下代码仅执行 testFunc1 时。字符串“test2”从未打印过一次,我不确定为什么。我希望 testFunc1 和 testFunc2 同时执行。一般来说,我对线程和 Python 非常陌生,因此欢迎提供有关线程的任何建议以及解决我的问题的方法。这是代码:
import time, threading
class testClass:
def __init__(self):
self.count = 0
def testFunc1(self):
while True:
print(self.count)
self.count = self.count + 1
time.sleep(1)
def testFunc2(self):
while True:
print("test2")
time.sleep(1)
def run(self):
threading.Thread(target=self.testFunc1(), args=(self,)).start()
threading.Thread(target=self.testFunc2(), args=(self,)).start()
test = testClass()
test.run()
尝试在 run()
方法中进行以下更改。
threading.Thread(target=self.testFunc1, args=[]).start()
threading.Thread(target=self.testFunc2, args=[]).start()
基本上在线程内调用函数时,您不需要使用 ()
和函数调用。
所以您需要在 target
.
中指定 self.testFunc1
而不是使用 self.testFunc1()
由于 testFunc1
& testFunc2
不带任何参数,args
可以作为空列表传递。 .
当你通过self.method
/cls_object.method
传递方法时,self
会自动传递,你只需要手动传递self
,以防你传递函数testClass.testFunc2
(在你的例子中 method
是 testFunc2
),所以 args=(self,)
是多余的。
此外,传递函数时不需要添加 ()
因为您不想调用该函数而只是传递它的引用,因此您可以将代码修复为:
threading.Thread(target=self.testFunc1).start()
threading.Thread(target=self.testFunc2).start()
我想对 运行 多个方法同时使用线程。但是,当我 运行 以下代码仅执行 testFunc1 时。字符串“test2”从未打印过一次,我不确定为什么。我希望 testFunc1 和 testFunc2 同时执行。一般来说,我对线程和 Python 非常陌生,因此欢迎提供有关线程的任何建议以及解决我的问题的方法。这是代码:
import time, threading
class testClass:
def __init__(self):
self.count = 0
def testFunc1(self):
while True:
print(self.count)
self.count = self.count + 1
time.sleep(1)
def testFunc2(self):
while True:
print("test2")
time.sleep(1)
def run(self):
threading.Thread(target=self.testFunc1(), args=(self,)).start()
threading.Thread(target=self.testFunc2(), args=(self,)).start()
test = testClass()
test.run()
尝试在 run()
方法中进行以下更改。
threading.Thread(target=self.testFunc1, args=[]).start()
threading.Thread(target=self.testFunc2, args=[]).start()
基本上在线程内调用函数时,您不需要使用 ()
和函数调用。
所以您需要在 target
.
self.testFunc1
而不是使用 self.testFunc1()
由于 testFunc1
& testFunc2
不带任何参数,args
可以作为空列表传递。 .
当你通过self.method
/cls_object.method
传递方法时,self
会自动传递,你只需要手动传递self
,以防你传递函数testClass.testFunc2
(在你的例子中 method
是 testFunc2
),所以 args=(self,)
是多余的。
此外,传递函数时不需要添加 ()
因为您不想调用该函数而只是传递它的引用,因此您可以将代码修复为:
threading.Thread(target=self.testFunc1).start()
threading.Thread(target=self.testFunc2).start()