0

所以我试图理解线程 - 并认为我从这样的事情开始:

一个类或它的一部分在线程中运行 - 并不时为其提供新数据以供使用,这里只是打印。

然而,它似乎并没有真正更新数据......实际上 - 它似乎在线程开始后卡住并且没有做任何其他事情?

这是我尝试过的:

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() 
4

2 回答 2

3

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

threading.Thread(target=test.printloop()).start()
                                      ~~ <-- remove these
于 2013-04-15T15:37:11.660 回答
1

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

Threading.Thread(printloop).start()

即将它从 printloop() 更改为 printloop。这会将函数作为对象传递给 Thread 执行。目前您正在评估 printloop() 并且 Thread() 方法期望 printloop() 为其返回一个新函数!

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

http://www.tutorialspoint.com/python/python_multithreading.htm

于 2013-04-15T15:42:25.770 回答