我在Python中使用threading
模块并阅读了教程here。我的预期程序流程是我有2个函数foo()
和bar()
,并且发生以下情况
1)foo()
运行并收集存储在data
中的一些数据然后停止。
2)bar()
然后使用data
持续运行。
3)2分钟foo()
再次运行并更新data
,bar()
继续使用旧版data
运行。
4)成功更新后bar()
开始使用新版本的数据。
5)循环回到(3)
现在我想将它们作为单独的线程运行,我的问题在于foo()
如何告诉bar()
它已经完成运行并且新版本的data
可用?
我已经阅读了Queue
,但在这种情况下无法确切地看到我将如何使用它。
答案 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