使用共享数组在 pyton 多处理中来回传输信息

问题描述

我正在测试一种使用多处理来加速“高级”计算的方法。 这个想法是让多个进程(我们称它们为 G)执行同一任务的不同执行T。这可能是一项很长的任务(玩整个棋盘游戏),最终会返回一些结果。它可以是异步的,我已经知道如何使用 multiprocessingapply_async 收集所有结果。

但是,在某些时候,T 需要调用 GPU 函数。我的想法是创建另一个进程 S 充当服务,从注册的 G 收集数据,对收集的数据调用 GPU 函数(tensorflow NN 评估)(而将 Gs 暂停)并将结果“发送”回所有相应的 Gs。

我看了How do I make processes able to write in an array of the main program?的回答。但是,这里的不同之处在于,收集不仅仅发生在任务结束时。

你认为这可能吗?我也尝试过使用 ctypes 和 OpenMP 的不同方法,但没有成功。

这是我想做的伪代码:

shared_service = Service()

class Worker():
    def __init__(self):
       shared_service.register(self)
       ...

    def run(self):
       finished = False
       while (not finished):
            ... do my stuff ...
            ... gather data to "send" to GPU ...
            shared_service.request(data,self.callback)
            ... wait for result ...
            ... use result ...
            ... do more stuff ...
    def callback(self,result):
        ... store result ...

class Service():
    ...
    def register(self,o):
        ... register new "client" ...

    def request(self,o,data):
        ... add request to current buffer(and keep track of requester)...

    def run(self):
        while(True):
            ... wait for full buffer ...
            ... call GPU function ...
            ... dispatch results to "clients" ...

main:
  ... init one "Service" ...
  ... init N "Worker" ...

  ... run N Workers asynchronously ...

感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)