【发布时间】:2013-12-01 08:21:55
【问题描述】:
我正在阅读this question,它询问生成器是否是线程安全的,一个答案说:
它不是线程安全的;同时通话可能交错,并与 局部变量。
Another answer 表明您可以使用锁来确保一次只有一个线程使用生成器。
我是多线程新手。谁能设计一个例子来说明当你使用没有锁的生成器时究竟会发生什么?
例如,如果我这样做似乎没有任何问题:
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()
【问题讨论】:
-
很难展示由于线程而无法工作的示例,因为您永远不知道线程将获得多少时间或它们将按什么顺序运行。这可能是运气不好,什么都没有坏事发生了。
-
说真的,不要一遍又一遍地问同一个问题。 (stackoverflow.com/questions/20042534/…) 如果您有什么不明白的地方,请过来把这个对话转移到Python Chat Room。
-
@InbarRose 他们是同一个问题吗?我在问失败时会发生什么。
-
@InbarRose:这个问题很好,和他在你的链接问题中问的不同。
标签: python multithreading generator