在 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(在你的例子中 methodtestFunc2),所以 args=(self,) 是多余的。

此外,传递函数时不需要添加 () 因为您不想调用该函数而只是传递它的引用,因此您可以将代码修复为:

threading.Thread(target=self.testFunc1).start()
threading.Thread(target=self.testFunc2).start()