Multithreading 多线程:多线程收集信息,一个线程工作

Multithreading 多线程:多线程收集信息,一个线程工作,multithreading,queue,python-multithreading,Multithreading,Queue,Python Multithreading,我正在编写的代码应具有以下结构: 多个线程正在收集数据。数据被放入缓冲区 同时,一个线程从该缓冲区弹出数据,对其执行一些操作,并将其存储在不同的缓冲区中(只有该线程可以访问) 工作线程仅在所有“收集器”线程都已完成且缓冲区中的所有数据都已处理时终止 有人能给我一些代码/伪代码来说明如何做这样的事情吗。主要是关于我应该使用什么样的缓冲区&线程如何通信,以便正确收集和处理所有数据 我已经阅读了python中的“队列”和“线程”类。然而,我仍然不知道如何正确地做到这一点。我用threading.E

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

  • 多个线程正在收集数据。数据被放入缓冲区
  • 同时,一个线程从该缓冲区弹出数据,对其执行一些操作,并将其存储在不同的缓冲区中(只有该线程可以访问)
  • 工作线程仅在所有“收集器”线程都已完成且缓冲区中的所有数据都已处理时终止
有人能给我一些代码/伪代码来说明如何做这样的事情吗。主要是关于我应该使用什么样的缓冲区&线程如何通信,以便正确收集和处理所有数据

我已经阅读了python中的“队列”和“线程”类。然而,我仍然不知道如何正确地做到这一点。我用threading.Event()对象尝试了多个简单的例子,但结果不一致


非常感谢

如果您的工作人员可以看到收集器正在完成,那么就只需在线程未完成或队列不为空时进行检查

如果您的工作人员看不到收集器的状态,甚至看不到收集器的数量,则可以让收集器在队列本身以及数据中传递该状态

假设数据对象有一个原点字段和一个布尔字段来标记为打开或关闭。例如,收集器1将发送如下内容:

data-1-opened, data-1-opened ... data-1-closed.
工人只需维护一组收集器ID,在新条目出现时添加它们,并在关闭时删除它们。因此,退出条件是集合为空,数据队列为空