多线程Python:线程通信

时间:2014-03-28 20:42:27

标签: python multithreading

我在Python中使用threading模块并阅读了教程here。我的预期程序流程是我有2个函数foo()bar(),并且发生以下情况

1)foo()运行并收集存储在data中的一些数据然后停止。

2)bar()然后使用data持续运行。

3)2分钟foo()再次运行并更新databar()继续使用旧版data运行。

4)成功更新后bar()开始使用新版本的数据。

5)循环回到(3)

现在我想将它们作为单独的线程运行,我的问题在于foo()如何告诉bar()它已经完成运行并且新版本的data可用?

我已经阅读了Queue,但在这种情况下无法确切地看到我将如何使用它。

1 个答案:

答案 0 :(得分:1)

这取决于bar如何使用数据。如果bar有一些可以选择使用现有数据或新数据的自然点,它可以读取由foo填充的队列。

def foo(bar_q):
    while True:
        data = get_some_data()
        # copy or deepcopy if foo will be updating data instead of fetching new
        bar_q.put(copy.copy(data))
        time.sleep(120)

def bar(bar_q):
    # wait for the first data
    data = bar_q.get()
    bar_q.task_done()
    while True:
        process_some_data(data)
        try:
            # get new data if available
            data = bar_q.get_nowait()
            bar_q.task_done()
        except Queue.Empty:
            pass