多线程:多个线程收集信息,一个做工作
Multi Threading: Multiple threads collecting information, One does work
我正在编写的代码应具有以下结构:
- 多个线程正在收集数据。数据放在缓冲区中。
- 一个线程同时从该缓冲区中弹出数据,对其进行一些处理,然后将其存储在另一个缓冲区中(只有该线程可以访问)。
- 只有当所有 "collector" 线程都完成并且缓冲区中的所有数据都已处理时,工作线程才会终止。
谁能给我一些 code/pseudo 代码,告诉我如何做这样的事情。主要是关于我应该使用哪种缓冲区以及线程如何通信以便正确收集和处理所有数据。
我已经阅读了 python 中的 "Queue" 和 "threading" class。但是,我仍然不确定如何正确执行此操作。我已经用 threading.Event() 对象尝试了多个简单示例 - 但是结果不一致。
非常感谢!
如果您的工作人员可以看到正在完成的收集器,那么它就像检查线程未完成或队列不为空一样简单。
如果您的工作人员看不到收集器状态,甚至看不到收集器的数量,您可以让收集器在队列本身中与数据一起传达该状态。
假设数据对象有一个原始字段和一个标记为打开或关闭的布尔字段。例如,收集器 1 会发送如下内容:
data-1-opened, data-1-opened ... data-1-closed.
工作人员只需要维护一组收集器 ID,在出现时添加新条目,并在关闭时删除它们。所以退出条件是集合为空且数据队列为空。
我正在编写的代码应具有以下结构:
- 多个线程正在收集数据。数据放在缓冲区中。
- 一个线程同时从该缓冲区中弹出数据,对其进行一些处理,然后将其存储在另一个缓冲区中(只有该线程可以访问)。
- 只有当所有 "collector" 线程都完成并且缓冲区中的所有数据都已处理时,工作线程才会终止。
谁能给我一些 code/pseudo 代码,告诉我如何做这样的事情。主要是关于我应该使用哪种缓冲区以及线程如何通信以便正确收集和处理所有数据。
我已经阅读了 python 中的 "Queue" 和 "threading" class。但是,我仍然不确定如何正确执行此操作。我已经用 threading.Event() 对象尝试了多个简单示例 - 但是结果不一致。
非常感谢!
如果您的工作人员可以看到正在完成的收集器,那么它就像检查线程未完成或队列不为空一样简单。
如果您的工作人员看不到收集器状态,甚至看不到收集器的数量,您可以让收集器在队列本身中与数据一起传达该状态。
假设数据对象有一个原始字段和一个标记为打开或关闭的布尔字段。例如,收集器 1 会发送如下内容:
data-1-opened, data-1-opened ... data-1-closed.
工作人员只需要维护一组收集器 ID,在出现时添加新条目,并在关闭时删除它们。所以退出条件是集合为空且数据队列为空。