1

我有这样的事情:

class thread1(threading.Thread):
    def __init__(self):
        file = open("/home/antoni4040/file.txt", "r")
        data = file.read()
        num = 1
        while True:
           if str(num) in data:
               clas = ExportToGIMP
               clas.update()
           num += 1     
thread = thread1
        thread.start()
        thread.join()

我得到这个错误:

TypeError: start() takes exactly 1 argument (0 given)

为什么?

4

2 回答 2

5

thread = thread1需要thread = thread1()。否则,您将尝试调用该类的方法,而不是该类的实际实例。


此外,不要覆盖__init__Thread 对象来完成您的工作 - 覆盖run

(虽然您可以覆盖__init__进行设置,但这实际上并没有在线程中运行,并且也需要调用super()。)


这是您的代码的外观:

class thread1(threading.Thread):
    def run(self):
        file = open("/home/antoni4040/file.txt", "r")
        data = file.read()
        num = 1
        while True:
           if str(num) in data:
               clas = ExportToGIMP
               clas.update()
           num += 1     

thread = thread1()
        thread.start()
        thread.join()
于 2012-10-29T20:11:11.510 回答
3

当你写

thread = thread1

您分配给thread班级thread1,即thread成为thread1. 出于这个原因,如果你再写thread.start()你会得到那个错误 - 你正在调用一个实例方法而没有传递self

你真正想要的是实例化 thread1

thread = thread1()

sothread成为 的实例thread1,您可以在其上调用实例方法,例如start().

顺便说一句,正确的使用方法threading.Thread是重写run方法(您编写要在另一个线程中运行的代码),而不是(仅)构造函数。

于 2012-10-29T20:11:41.617 回答