您在每个线程中实例化一个新的生成器run
与此功能:
for i in generator():
each generator
调用返回生成器的新实例:
>>> data = [i for i in xrange(10)]
>>> a, b = generator(), generator()
>>> id(a), id(b)
(37528032, 37527952)
Here a
and b
有不同的 id,即使没有线程也会生成相同的结果:
>>> list(a), list(b)
([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
但请注意,生成器不是线程安全的,在线程应用程序中使用它们很棘手。你不必担心锁定,参见示例,否则你会得到ValueError: generator already executing
偶尔会出错。或者你可以使用队列.队列用于线程通信。