globale Variable schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

verzeiht die blöde frage. wieso geht das schreiben der globalen nicht ?
(daß das weiterführende probleme macht, mutex usw., weiß ich, das ist nicht die frage...)

Code: Alles auswählen

    
import threading 
import time

global a
a=2

def erster():
    while True:
        print("a=",a)
        time.sleep(1)

def zweiter():
    while True:
        a=a+1			#hier jammert er rum ..
        print("a=",a)
        time.sleep(1)

apfel = threading.Thread(target=erster, args=())
birne = threading.Thread(target=zweiter, args=())

apfel.start()
birne.start()
nezzcarth
User
Beiträge: 1752
Registriert: Samstag 16. April 2011, 12:47

Du verwendest das global Statement nicht korrekt. Bindet man innerhalb ein Funktionen usw. ein Objekt an einen Namen, ist dieser in Python per Default lokal. Mit global kennzeichnet man, dass ein Name global und nicht lokal interpretiert werden soll (siehe: https://docs.python.org/3/reference/sim ... -statement). Beim reinen Zugriff merkt man den Unterschied oft nicht; beim Schreiben macht es sich aber bemerkbar. Verwendest du global innerhalb der Funktion nicht, gibt es nach der Zuweisung ein lokales 'a', dass das globale überdeckt. Das global Statement gehört also in die Funktion, nicht auf Modulebene, wo der globale Name eingeführt wird. Außerdem sollte man noch mal sagen, dass man global in Python eigentlich gar nicht verwenden soll (außer es gibt wirklich gute Gründe dafür; in den meisten Fällen, in denen hier im Forum danach gefragt wird, ist 'global' nicht nötig und als grober Designfehler anzusehen).
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

@reinerdoll: Vergiss, dass es global gibt. Gerade für die Kommunikation zwischen Threads, wie du es hier möchtest, ist das keine gute Idee. Dafür gibt es unter anderem queue.
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

first read ...
danke ! jetzt läuft es.
ich weiß um die probleme, es geht mir sogar darum, absichtlich eine race-condition zu provozieren.
das thema ist der mutex.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dir ist das GIL ein Begriff? Bestimmte Probleme mit races sind dadurch nicht erzeugbar in Python.
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Dann beschäftige dich auch mal mit dem GIL.
Antworten