@KuniBert: Deine Probleme kommen nicht von Multithreading, sondern daher, dass dein Programm fehlerhaft ist. An Multithreading würde ich mich erst heranwagen, wenn ich alles andere einigermaßen beherrsche.
So einen Fehler zB.:
Code: Alles auswählen
>>> class ampel:
... pass
...
>>> print(ampel)
<class '__main__.ampel'>
>>> ampel = ampel()
>>> print(ampel)
<__main__.ampel object at 0xb6f7b16c>
>>> ampel = ampel()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'ampel' object is not callable
Außerdem frage ich mich, warum Anfänger sich selber das Leben immer so schwer machen. Vergleiche mal:
Code: Alles auswählen
>>> x = 0
>>> while x < 5:
... print(x)
... x += 1
...
0
1
2
3
4
>>> for x in range(5):
... print(x)
...
0
1
2
3
4
Nicht nur sind es in der zweiten Variante nur halb soviele Zeilen Code, es gibt auch weniger Stellen, wo man etwas verkehrt machen kann und damit weniger Stellen, die man sich anschauen muss, wenn man etwas verkehrt gemacht hat.
Und dann das, dass run außer self eben keine Parameter erwartet:
Code: Alles auswählen
>>> import threading
>>> class ampel(threading.Thread):
... def run(self, bla):
... pass
...
>>> ampel().start()
>>> Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner
self.run()
TypeError: run() missing 1 required positional argument: 'bla'
In specifications, Murphy's Law supersedes Ohm's.