2017-07-10 4 views
-1

Alle Variablen, die nicht lokal sind, sind an der Spitze des Codes unter den Modulen. Ich verwende Multithreading, um mehrere Funktionen gleichzeitig zu verwenden, und selbst beim Vergleich mit den anderen Loops kann ich nicht herausfinden, warum es nicht funktioniert.Python While-Schleife tut nicht, was es soll

def SQUIRE(): 
global currency 
global alive 
global squire 
while alive == True and squire == True: 
    chanceA = random.randint(1, 100) 
    if chanceA <= 10: 
     currency += 10 
     print("You have delivered a message for 10 currency. You now own", currency, " currency.") 
     time.sleep(1) 

Es sollte, wenn der Mensch() am Leben = True und überprüfen, ob Squire = true, um eine Zufallszahl zwischen 1 und 100 wählt Wenn diese Zahl zwischen 1 und 10, mit 10 bis Währung. Stattdessen tut es absolut nichts.

https://pastebin.com/twxNmeDF

Hier ist der vollständige Code Referenz. Es ist wahrscheinlich ein schreckliches Durcheinander, es ist nur eine Nebensache, an der ich arbeite, während ich Python lerne. Nur war es ein paar Tage

+0

Wenn Sie nur Python lernen, sollten Sie nicht mit Threads herumspielen. (In der Tat, das gilt auch, wenn Sie ein Experte sind ...) –

+0

Wollen Sie wirklich alle diese Dinge zur gleichen Zeit passieren? Könntest du einen Schritt nach dem anderen machen (vielleicht hilft dir der Ertrag) – doctorlove

Antwort

1

Was scheint zu passieren ist, dass squireFalse ist und daher die Schleife nicht ausgeführt wird.

Wenn mit Gewinden arbeiten, sollten Sie sich bewusst sein, dass in der Regel gibt es keine Garantie dafür gibt, dass die Fäden in bestimmten Reihenfolge ausgeführt werden, werden sie in parallell und es kann passieren, effektiv ausgeführt werden, dass der SQUIRE Faden zum Test der Variablen squire bekommt vor jedem anderen Thread in der Lage, es zu True zu ändern.

0

Wenn Sie mehrere Threads verwenden, sollten Sie auf jeden Thread im Threadpool warten, um den Zugriff auf die Ressourcen zu beenden. Daher sollten Sie t.join() verwenden, nachdem Sie den Thread gestartet haben.