我有这样的事情:
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)
为什么吗
答案 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
方法(在那里编写要在另一个线程中运行的代码),而不是(仅)构造函数。