我有一个多线程程序,我创建一个生成器函数,然后将其传递给新线程.我希望它在本质上是共享/全局的,因此每个线程都可以从生成器获取下一个值.
使用这样的生成器是安全的,还是会遇到从多个线程访问共享生成器的问题/条件?
如果没有,是否有更好的方法来解决问题?我需要一些循环遍历列表的东西,并为任何线程调用它生成下一个值.
我正在学习Python中的多线程.我想知道如何使用生成器向多个线程提供数据.这是我写的:
import threading
data = [i for i in xrange(100)]
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 generator():
print '{0} {1}'.format(self.name, i)
a = CountThread('a')
b = CountThread('b')
a.start()
b.start()
Run Code Online (Sandbox Code Playgroud)
我以为列表只会被迭代一次.但似乎每个线程都是独立地通过列表进行交互.
输出:
a 0
a 1
a 2
b 0
a 3
a 4
b 1
b 2
a 5
a 6
a 7
a 8
a 9
b 3
b 4
b 5
b …Run Code Online (Sandbox Code Playgroud)