многопоточность: почему генераторы не поддерживают потоки? Что происходит, когда он разделяется между потоками?
я читаюэтот вопрос который спрашивает, являются ли генераторы потокобезопасными, и один ответ сказал:
Это не потокобезопасно; одновременные вызовы могут чередоваться и связываться с локальными переменными.
Другой ответ показывает, что вы можете использовать блокировку, чтобы гарантировать, что только один поток использует генератор одновременно.
Я новичок в многопоточности. Может кто-нибудь придумать пример, чтобы показать, что именно происходит, когда вы используете генератор без блокировки?
Например, у меня, кажется, нет проблем, если я сделаю это:
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()