Permalänk
Inaktiv

Python threading problem.

Sitter och försöker få följande kodsnutt att fungera.
Problemet är att när tråden ska köras fastnar den i while-loopen och fortsätter inte med huvudkoden. Vad har jag missat?

#!/usr/bin/python3 import argparse, time, sys, os, rgbmatrix, threading, queue from rgbmatrix import graphics from rgbmatrix import RGBMatrix class LedText: def __init__(self): self.DEFAULTFONT = "fonts/6x10.bdf" self.msg = None self.color = graphics.Color(255, 0 ,0) self.x = 0 self.y = 0 self.matrix = RGBMatrix(16, 1, 1) self.matrix.pwmBits = 11 self.matrix.brightness = 20 self.matrix.luminanceCorrect = False self.canvas = self.matrix; self.font = graphics.Font() self.font.LoadFont(self.DEFAULTFONT) def SetText(self, msgIn): self.msg = msgIn def SetColor(self, r, g, b): self.color = graphics.Color(r, g ,b) def SetPos(self, x, y): self.x = x self.y = y def SetFont(self, font): fontPath = "fonts/"+font if (path.isfile(fontPath)): self.font.LoadFont(fontPath) else: self.font.LoadFont(self.DEFAULTFONT) def Clear(self): self.matrix.Clear() def Update(self): print("Tråden") while True: time.sleep(0.1) self.Clear() f=open("data") text=f.read() f.close graphics.DrawText(self.canvas, self.font, self.x, self.y, self.color, text) if __name__ == "__main__": threads = [] count=0 led=LedText() led.SetPos(5,10) led.SetText("test") print("Innan tråden") t = threading.Thread(target=led.Update()) threads.append(t) t.start() print("Efter tråden") while True: count += 1 c = str(count) print("Test om vi är igång efter start av thread: " + c) time.sleep(1)

Permalänk
Medlem

Testa att ändra

t = threading.Thread(target=led.Update())

till

t = threading.Thread(target=led.Update)

Visa signatur

[Moderkort: Asus TUF X570-Plus Gaming] [Nätagg: Corsair AX 750W]
[Minne: G.Skill Trident Z Neo DDR4 3600MHz 2x16GB] [Grafikkort: ASUS RTX 2070S]
[Processor: AMD Ryzen 7 3700X] [Hårddisk: Corsair Force Series MP510 960GB + SSDs + lagringsdiskar]

Permalänk
Medlem

t = threading.Thread(target=led.Update())

Ska vara

t = threading.Thread(target=led.Update)

Problemet är att du kallar funktionen Update där, när du bara borde skicka en reference.

Permalänk
Inaktiv
Skrivet av EagiZ:

Testa att ändra

t = threading.Thread(target=led.Update())

till

t = threading.Thread(target=led.Update)

Skrivet av Snowy86:

t = threading.Thread(target=led.Update())

Ska vara > t = threading.Thread(target=led.Update)

Haha ni har så rätt! Verkar fungera nu
Tack för hjälpen!

Permalänk
Medlem

Anledningen till att det inte fungerade tidigare var för att du (omedvetet) gav returvärdet av led.Update som input till threading.Thread, som då Python måste räkna ut med main-tråden (vilket aldrig terminerar).

Visa signatur

[Moderkort: Asus TUF X570-Plus Gaming] [Nätagg: Corsair AX 750W]
[Minne: G.Skill Trident Z Neo DDR4 3600MHz 2x16GB] [Grafikkort: ASUS RTX 2070S]
[Processor: AMD Ryzen 7 3700X] [Hårddisk: Corsair Force Series MP510 960GB + SSDs + lagringsdiskar]