代码之家  ›  专栏  ›  技术社区  ›  Ankur Agarwal

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

  •  1
  • Ankur Agarwal  · 技术社区  · 11 年前
    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和 产量 它

    1 回复  |  直到 11 年前
        1
  •  3
  •   Martijn Pieters    11 年前

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

    线程 必须 是独立运行的功能;它们由 threading.Thread() 在课堂上和从那里独立工作。在那里使用生成器对象意义不大。

    您本质上是在尝试混合并发模型。使用发电机 在里面 使用发电机时,螺纹很好 像 线程不起作用。使用队列或其他方式将结果传递回主线程。