生成器和线程:如何访问线程产生的数据

时间:2015-09-13 08:08:31

标签: python multithreading python-2.7 generator

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

以下是我要做的事情:

  1. 主线程启动一个馈线线程,用于输入要在q1中消耗的数据。

  2. 主线程启动工作线程,使用q1中的数据并将结果写入q2。

  3. 主线程或消费者线程(仅1)消耗q2和yield中的数据。

1 个答案:

答案 0 :(得分:3)

你不能。工作线程不能是生成器。

线程必须是自己运行的函数;它们由threading.Thread()课程开始,并从那里开始独立工作。使用生成器对象毫无意义。

您实际上是在尝试将并发模型混合在一起。在中使用生成器一个线程很好,使用生成器作为一个线程不会起作用。使用队列或其他方法将结果传回主线程。