I'm learning multithreading in Python. I want to know how to provide data to multiple threads using generators. Here's what I wrote:
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()
I thought the list would only be iterated for once. But it seems that each thread is interating through the list independently.
output:
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 6
b 7
b 8
...
(200 lines)
What is the underlying reason for this? How can I rewrite the program so that the values in the list will only be printed once.