TypeError: start() prend exactement 1 argument (0)?
J'ai quelque chose comme ceci:
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()
Et j'obtiens cette erreur:
TypeError: start() takes exactly 1 argument (0 given)
Pourquoi?
Vous devez vous connecter pour publier un commentaire.
thread = thread1
doit êtrethread = thread1()
. Sinon, vous essayez d'appeler des méthodes de la classe, plutôt que d'une réelle instance de la classe.Aussi, ne pas remplacer
__init__
sur un objet Thread pour faire votre travail - remplacerexécuter
.(Alors que vous pouvez remplacer
__init__
à faire de l'installation, ce n'est pas réellement exécuter dans un thread, et a besoin de faire appelsuper()
ainsi.)Voici comment votre code devrait ressembler à:
Lorsque vous écrivez
vous attribuez à
thread
la classethread1
, c'est à direthread
devient synonyme dethread1
. Pour cette raison, si vous ecrivezthread.start()
vous obtenez cette erreur - que vous appelez une méthode d'instance sans passerself
Ce que vous voulez vraiment est de instancier
thread1
:donc
thread
devient une instance dethread1
, sur lequel vous pouvez appeler les méthodes d'instance commestart()
.Par la manière, la façon correcte d'utiliser
threading.Thread
est de remplacer larun
méthode (où vous écrivez le code qui doit être exécuté dans un autre thread), et non pas (seulement) le constructeur.