使用多重处理,使用来自多个数据加载器的对象填充队列

洛伦兹·鲁伯格

我在机器学习输入管道上工作。我写了一个数据加载器,它从一个大的.hdf文件中读取数据并返回分片,每个分片大约需要2秒钟。因此,我想使用一个队列,该队列接收来自多个数据加载器的对象,并可以通过下一个函数(例如生成器)从队列中返回单个对象。此外,填充队列的进程应以某种方式在后台运行,并在队列未满时重新填充队列。我没有使其正常工作。它使用单个数据加载器工作,给了我4倍的相同切片。

import multiprocessing as mp

class Queue_Generator():
    def __init__(self, data_loader_list):
        self.pool = mp.Pool(4)
        self.data_loader_list = data_loader_list
        self.queue = mp.Queue(maxsize=16)
        self.pool.map(self.fill_queue, self.data_loader_list)
    def fill_queue(self,gen):
        self.queue.put(next(gen))
    def __next__(self):
        yield self.queue.get()

我从中得到的是:NotImplementedError:池对象不能在进程之间传递或腌制。

马克

您的特定错误意味着将类方法传递给池时,不能将池作为类的一部分。我建议的可能是以下内容:

import multiprocessing as mp
from queue import Empty


class QueueGenerator(object):
    def __init__(self, data_loader_list):
        self.data_loader_list = data_loader_list
        self.queue = mp.Queue(maxsize=16)

    def __iter__(self):
        processes = list()
        for _ in range(4):
            pr = mp.Process(target=fill_queue, args=(self.queue, self.data_loader_list))
            pr.start()
            processes.append(pr)
        return self

    def __next__(self):
        try:
            return self.queue.get(timeout=1) # this should have a value, otherwise your loop will never stop. make it something that ensures your processes have enough time to update the queue but not too long that your program freezes for an extended period of time after all information is processed
        except Empty:
            raise StopIteration

# have fill queue as a separate function
def fill_queue(queue, gen):
    while True:
        try:
            value = next(gen)
            queue.put(value)
        except StopIteration: # assumes the given data_loader_list is an iterator
            break
    print('stopping')


gen = iter(range(70))

qg = QueueGenerator(gen)


for val in qg:
    print(val)
# test if it works several times:
for val in qg:
    print(val)

我想为您解决的下一个问题是让data_loader_list在每个单独的过程中提供新信息。但是由于您还没有提供任何信息,因此我无法为您提供帮助。但是上述内容确实为您提供了一种使进程填充队列的方法,然后将其作为迭代器传递出去。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用来自多个indexeddb对象库的数据

来自分类Dev

用来自多个 mysql 查询的数据填充对象数组

来自分类Dev

使用来自多个数组的值过滤 JavaScript 对象

来自分类Dev

使用来自多个列的数据填充单个SQL Server列,并为值添加前缀

来自分类Dev

JavaFX-TableView-使用来自多个属性的文本填充单元格

来自分类Dev

使用来自Ajax的数据填充多个下拉列表

来自分类Dev

使用来自多个相关模型的值创建上下文对象

来自分类Dev

断管:使用来自多处理池的映射

来自分类Dev

使用带有注释的Spring Boot是否可以处理来自多个WMQ队列的消息?

来自分类Dev

Javascript表使用来自多个txt文件的数据并显示在html文件上

来自分类Dev

使用来自多个输入的数据更改段落文本

来自分类Dev

使用来自多个Fetch API请求的变量

来自分类Dev

使用来自多个模块的回调函数

来自分类Dev

使用来自多个设备的 Dropbox 访问令牌

来自分类Dev

Excel VBA如何使用来自多个Excel范围的值填充多维(3d)数组?

来自分类Dev

Flask / Python-如何使用来自多个IP摄像机的实时镜头填充HTML页面?

来自分类Dev

使用来自SQLite的数据填充ExpandableListView

来自分类Dev

如何使用Seaborn Relplot绘制来自多个数据框的数据?

来自分类Dev

使用来自两个数据库表的数据填充 RecyclerView Item

来自分类Dev

仅使用来自多个控制器的一个视图使用ngresource创建工厂服务

来自分类Dev

使用XSL合并后如何处理来自多个XML文件的所有数据

来自分类Dev

在单个活动中处理来自多个意图的多个数据

来自分类Dev

同步处理来自多个线程的数据

来自分类Dev

如何使用来自多个模块的多个dimens.xml文件?

来自分类Dev

使用来自SQLAlchemy对象的数据预填充烧瓶中的WTforms

来自分类Dev

如何使用NodeJS服务器合并来自多个API的JSON数据

来自分类Dev

解析来自多个Json对象的数据

来自分类Dev

如何使用来自 Asp.net Core 控制器的 Json 数据填充 Javascript var

来自分类Dev

使用来自另一个数据帧的条件填充和生成熊猫数据帧

Related 相关文章

  1. 1

    使用来自多个indexeddb对象库的数据

  2. 2

    用来自多个 mysql 查询的数据填充对象数组

  3. 3

    使用来自多个数组的值过滤 JavaScript 对象

  4. 4

    使用来自多个列的数据填充单个SQL Server列,并为值添加前缀

  5. 5

    JavaFX-TableView-使用来自多个属性的文本填充单元格

  6. 6

    使用来自Ajax的数据填充多个下拉列表

  7. 7

    使用来自多个相关模型的值创建上下文对象

  8. 8

    断管:使用来自多处理池的映射

  9. 9

    使用带有注释的Spring Boot是否可以处理来自多个WMQ队列的消息?

  10. 10

    Javascript表使用来自多个txt文件的数据并显示在html文件上

  11. 11

    使用来自多个输入的数据更改段落文本

  12. 12

    使用来自多个Fetch API请求的变量

  13. 13

    使用来自多个模块的回调函数

  14. 14

    使用来自多个设备的 Dropbox 访问令牌

  15. 15

    Excel VBA如何使用来自多个Excel范围的值填充多维(3d)数组?

  16. 16

    Flask / Python-如何使用来自多个IP摄像机的实时镜头填充HTML页面?

  17. 17

    使用来自SQLite的数据填充ExpandableListView

  18. 18

    如何使用Seaborn Relplot绘制来自多个数据框的数据?

  19. 19

    使用来自两个数据库表的数据填充 RecyclerView Item

  20. 20

    仅使用来自多个控制器的一个视图使用ngresource创建工厂服务

  21. 21

    使用XSL合并后如何处理来自多个XML文件的所有数据

  22. 22

    在单个活动中处理来自多个意图的多个数据

  23. 23

    同步处理来自多个线程的数据

  24. 24

    如何使用来自多个模块的多个dimens.xml文件?

  25. 25

    使用来自SQLAlchemy对象的数据预填充烧瓶中的WTforms

  26. 26

    如何使用NodeJS服务器合并来自多个API的JSON数据

  27. 27

    解析来自多个Json对象的数据

  28. 28

    如何使用来自 Asp.net Core 控制器的 Json 数据填充 Javascript var

  29. 29

    使用来自另一个数据帧的条件填充和生成熊猫数据帧

热门标签

归档