多线程:多线程收集信息,一个确实有效

时间:2018-04-30 13:05:02

标签: multithreading queue python-multithreading

我正在编写应具有以下结构的代码:

  • 多个线程正在收集数据。数据放在缓冲区中。
  • 同时从该缓冲区中执行一个线程弹出数据,对其执行一些操作,并将其存储在不同的缓冲区中(只有此线程可以访问)。
  • 只有所有"收集器"工作线程才会终止。线程已完成,缓冲区中的所有数据都已处理完毕。

有人可以给我一些关于如何做这样的事情的代码/伪代码。主要是我应该使用什么样的缓冲区&线程如何通信,以便正确地收集和处理所有数据。

我已经阅读过" Queue"和"线程" python中的类。但是,我仍然不确定如何正确地做到这一点。我已尝试使用threading.Event()对象的多个简单示例 - 但结果不一致。

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您的工作人员可以看到收集器已完成,那么它就像在线程未完成时检查一样简单,或者队列不为空。

如果您的工作人员看不到收集者的状态,甚至看不到收集者的数量,您可以让收集者沿着数据在队列中传达该状态。

想象一下,数据对象有一个原始字段,以及一个标记为打开或关闭的布尔字段。例如,收集器1将发送类似:

的内容
data-1-opened, data-1-opened ... data-1-closed.

工作者只需要维护一组收集器ID,在它们出现时添加新条目,并在关闭时删除它们。因此退出条件是set为空且数据队列为空。