Multithreading: Warum sind Generatoren nicht threadsicher? Was passiert, wenn es zwischen Threads geteilt wird?

ich lesediese Frage die fragt, ob Generatoren thread-sicher sind, und eine Antwort sagte:

Es ist nicht threadsicher; Gleichzeitige Aufrufe können sich verschachteln und mit den lokalen Variablen verwechseln.

Noch eine Antwort zeigt, dass Sie eine Sperre verwenden können, um sicherzustellen, dass jeweils nur ein Thread den Generator verwendet.

Ich bin neu in Multithreading. Kann jemand anhand eines Beispiels zeigen, was genau passiert, wenn Sie den Generator ohne Sperre verwenden?

Zum Beispiel scheint es keine Probleme zu geben, wenn ich das mache:

import threading

def generator():
    for i in data:
        yield i

class CountThread(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.name = name

    def run(self):
        for i in gen():
            print '{0} {1}'.format(self.name, i)

data = [i for i in xrange(100)]
gen = generator()
a = CountThread('a')
b = CountThread('b')
a.start()
b.start()

Antworten auf die Frage(1)

Ihre Antwort auf die Frage