2016-06-01 11 views
1

Wie aktualisiere ich eine Variable in einem laufenden Thread, die eine Endlosschleife basierend auf einer solchen Variable ist?
eine vereinfachte Version von dem, was ich versuchte, ist was folgt, zu keinen Ergebnissen natürlich, und ich kann keinen Zeiger finden.Python - Update-Thread-Variable

import some_module as mod 
import threading 

class thr (threading.Thread): 
    NUM = 5 # set a default value to start the script 
    def run (self): 
     mod.NUM = NUM 
     mod.main_loop() 

try: 
    thr().start() 
    time.sleep(1) 
    thr().NUM = 2 
    time.sleep(1) 
    thr().NUM = 6 
    time.sleep(1) 
    thr().NUM = 8 

Antwort

1

Das Problem ist, dass Sie jedes Mal, wenn Sie "Anruf" einen neuen Thread sind zu schaffen (das heißt instantiate) thr. Ändern Sie Ihren Code in

t = thr() 
t.start() 
time.sleep(1) 
t.NUM = 2 
time.sleep(1) 
t.NUM = 6 
time.sleep(1) 
t.NUM = 8 
time.sleep(1) 
+0

leider aktualisiert es immer noch nicht die Variable in der Endlosschleife – nxet

+0

Es aktualisiert die Variable 'NUM' in der Thread-Objekt-Instanz ... um' mod.NUM' zu aktualisieren, tun Sie das einfach mit 'mod.NUM = 2' ... etc. – 6502

+0

soweit habe ich schon, mein Problem hier ist, dass die aktualisierte Variable nicht in die Endlosschleife eingespeist wird ... – nxet

0

Vielleicht versuchen Sie, Warteschlange für Änderung NUM-Variable verwenden.

https://docs.python.org/2/library/queue.html

prüfen Beispiele hier:

https://pymotw.com/2/Queue/

die Warteschlange Allgemeinen speakinig Sie senden Daten zwischen Threads ermöglicht. Verwenden Sie get() zum Abrufen von Daten aus der Warteschlange und put() zum Ablegen von Daten in die Warteschlange.

+0

Ich fürchte, das ist ein bisschen zu allgemein für meine begrenzten Kenntnisse der Sprache, und das Lesen des angegebenen Links hat leider nicht viel geholfen. Kannst du bitte etwas mehr dazu sagen? Vielen Dank – nxet

+0

der zweite Link war viel hilfreicher. aber liege ich falsch, wenn ich annehme, dass ich jedes Mal einen neuen Thread töten und spawnen muss? – nxet

+0

@nxet Ich verstehe nicht:) Was bedeutet - "Ich bin gezwungen, jedes Mal einen neuen Thread zu töten und zu spawnen?" – MartinP