Ich habe ein Python-Programm, das ein anderes Modul (SqRt, in einer anderen Python-Datei, dum_waiter.py) als Thread ausgeführt wird. Der Thread/das Modul läuft, es druckt ein paar Kommentare aus, um es mir mitzuteilen. Das oberste Programm, das es aufruft, sieht jedoch keine globale Variable (Result), die es (SqRt) erstellt hat. Wenn ich beide Bits in derselben Python-Datei habe, ist alles in Ordnung.Python-Programm führt Thread in einem anderen Python-Programm, kann globale Variable nicht sehen
Ich versuche tatsächlich, ein Bild auf einem RPi als Reaktion auf einen Tastendruck zu erfassen, funktioniert alles mit dem Poling der Linie, aber es als Thread läuft nicht (Poling ist jedes Bild, also wenn Bildrate ist sehr niedrig, kann es einen Knopfdruck verpassen).
Code unten ist ein Testcode, sehr einfach. Es ruft SqRt in dumb_waiter.py auf (herumspielen, die Namen sind verrückt). Es dient nur dazu, mich auf die Sichtbarkeit der Variablen zu konzentrieren.
import time
from threading import Thread
from dumb_waiter import SqRt
Result = False
Result1 = Thread(target = SqRt, args = ("sqrt 2", 2))
Result1.start()
while not Result:
pass
print("test dumb_waiter, output is", Result)
Als nächstes folgt das Programm dum_waiter.py. I füge eine zufällige Verzögerung von 1 bis 10 Sekunden, so dass ich kann leicht mehr als 1 Faden läuft visualisieren .....: -
import time
from threading import Thread
from random import randint # this should be in the module below, but it works
def SqRt(VarName, MyNo):
global Result
Result = False
Wait = randint(1,10)
print("wait", Wait, "seconds")
time.sleep(Wait)
Result = [VarName, MyNo ** 0.5]
print("dumb_waiter result is", Result)
return
Die oben die folgende Ausgabe erzeugt: -
2 Sekunden warten
dumb_waiter Ergebnis ist [ ‚sqrt 2‘, 1,4142135623730951]
eindeutig der Faden arbeitet, aber ich kann die globale Variable Ergebnis aus dem früheren Code nicht sehen, dass dumb_waiter.py ruft, und bin Ausführung daher nicht den Druck ("Test dumb_waiter, Ausgabe ist", Ergebnis) instru ction im Code der obersten Ebene. Wie ich sage, alles in eine einzige Python-Datei und alles funktioniert gut .....
Also, wie erstelle ich eine Variable, die der Thread-Code ändert, und die Top-Level-Code kann sehen, wenn die zwei Programme sind in verschiedenen Python-Dateien?
Guter Punkt über das Anschließen des Threads. Im realen Programm werde ich immer noch das Ergebnis (zwischen den Frames) polieren, um zu sehen, ob die Taste gedrückt wurde. Ich habe das Problem mit einer (meiner Meinung nach) sehr uneleganten Lösung gelöst. Ich habe import dumb_waiter als d # hinzugefügt, um die Eingabe später zu minimieren. von dumb_waiter import * dann auf Ergebnis als d.Result bezogen. Sorry, kann nicht scheinen, ein cr zu bekommen, so Layout ist schlecht. – PeterPiper