Python将新数据添加到运行在线程中的类中

Python将新数据添加到运行在线程中的类中,python,Python,因此,我试图理解线程——我想从以下内容开始: 一个类或它的一部分在一个线程中运行,并时不时地给它提供新的数据,这里它只是打印 然而,它似乎并没有真正更新数据。。。事实上,它似乎在线程开始后就卡住了,不做任何其他事情 以下是我尝试过的: class Test: def __init__(self, num): self.num = num def printnum(self): print("Num is: " + str(self.num))

因此,我试图理解线程——我想从以下内容开始:

一个类或它的一部分在一个线程中运行,并时不时地给它提供新的数据,这里它只是打印

然而,它似乎并没有真正更新数据。。。事实上,它似乎在线程开始后就卡住了,不做任何其他事情

以下是我尝试过的:

class Test:
    def __init__(self, num):
        self.num = num

    def printnum(self):
        print("Num is: " + str(self.num))

    def printloop(self):
        while True:
            print(self.num)
            time.sleep(1)

    def setnum(self, num):
        self.num = num


test = Test(123)
test.printnum() 
time.sleep(2)

test.setnum(123456)
test.printnum() 
time.sleep(2)

threading.Thread(target=test.printloop()).start()

time.sleep(5)
test.setnum(31245)
test.printnum() 


time.sleep(5)
test1.setcount(532556663)
test.printnum() 

threading.Thread
构造函数中,您正在调用
printloop
方法。您需要在不调用它的情况下传入它,因此请删除括号:

threading.Thread(target=test.printloop()).start()
                                      ~~ <-- remove these
threading.Thread(target=test.printloop()).start()

~~在
threading.Thread
构造函数中,您正在调用
printloop
方法。您需要在不调用它的情况下传入它,因此请删除括号:

threading.Thread(target=test.printloop()).start()
                                      ~~ <-- remove these
threading.Thread(target=test.printloop()).start()

~~我认为您需要将此更改为:

Threading.Thread(printloop).start()
ie将其从printloop()更改为printloop。这将函数作为对象传递给线程执行。当前您正在计算printloop(),Thread()方法期望printloop()为其返回一个新函数

此外,当您将数据传递给新线程时,您可能会遇到重大困难-您可能需要设置锁以确保消息不会丢失/损坏。查看本教程,了解如何执行此操作(同步线程):


我认为您需要将此更改为:

Threading.Thread(printloop).start()
ie将其从printloop()更改为printloop。这将函数作为对象传递给线程执行。当前您正在计算printloop(),Thread()方法期望printloop()为其返回一个新函数

此外,当您将数据传递给新线程时,您可能会遇到重大困难-您可能需要设置锁以确保消息不会丢失/损坏。查看本教程,了解如何执行此操作(同步线程):


谢谢!作品现在我可以玩了谢谢!作品现在我可以玩得更多了