TypeError:start()只取1个参数(给定0)?

时间:2012-10-29 20:08:48

标签: python multithreading arguments typeerror

我有这样的事情:

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)

为什么吗

2 个答案:

答案 0 :(得分:5)

thread = thread1需要thread = thread1()。否则,你试图在类上调用方法,而不是类的实际实例。


此外,不要覆盖Thread对象上的__init__来完成工作 - 覆盖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()

答案 1 :(得分:3)

写作时

thread = thread1

您要分配thread班级thread1,即thread成为thread1的同义词。因此,如果您编写thread.start(),则会收到该错误 - 您正在调用实例方法而不传递self

您真正想要的是实例化 thread1

thread = thread1()

因此thread成为thread1的实例,您可以在其上调用start()等实例方法。

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