生成器和线程:如何访问线程产生的数据
Generators and threads: How can I access data yielded by threads
import Queue
import threading
import time
def work(q):
while True:
print threading.current_thread().getName() + ":" + str(time.clock())
yield q.get()
q.task_done()
def main():
q = Queue.Queue()
for i in range(10):
q.put(i)
for i in range(3):
t = threading.Thread(target=work, args=(q,))
t.daemon = True
t.start()
q.join()
在此示例中,我如何使用由主线程启动的线程yield
编辑的数据?
这是我正在尝试做的事情:
主线程启动一个馈送线程,该线程馈送要在 q1 中使用的数据。
主线程启动从 q1 消费数据并将结果写入 q2 的工作线程。
主线程或消费者线程(只有1个)在q2和yield
中消费数据。
你不能。工作线程不能是生成器。
线程必须是独立运行的函数;它们由 threading.Thread()
class 启动,并从那里开始独立工作。在那里使用生成器对象毫无意义。
您实质上是在尝试混合并发模型。使用生成器in一个线程没问题,使用一个生成器as一个线程就不行了。使用队列或其他方式将结果传回主线程。
import Queue
import threading
import time
def work(q):
while True:
print threading.current_thread().getName() + ":" + str(time.clock())
yield q.get()
q.task_done()
def main():
q = Queue.Queue()
for i in range(10):
q.put(i)
for i in range(3):
t = threading.Thread(target=work, args=(q,))
t.daemon = True
t.start()
q.join()
在此示例中,我如何使用由主线程启动的线程yield
编辑的数据?
这是我正在尝试做的事情:
主线程启动一个馈送线程,该线程馈送要在 q1 中使用的数据。
主线程启动从 q1 消费数据并将结果写入 q2 的工作线程。
主线程或消费者线程(只有1个)在q2和
yield
中消费数据。
你不能。工作线程不能是生成器。
线程必须是独立运行的函数;它们由 threading.Thread()
class 启动,并从那里开始独立工作。在那里使用生成器对象毫无意义。
您实质上是在尝试混合并发模型。使用生成器in一个线程没问题,使用一个生成器as一个线程就不行了。使用队列或其他方式将结果传回主线程。