从 pool.map() of pathos 获取结果
Getting results from pool.map() of pathos
我试图在下面的代码中创建一个我的问题:
import numpy as np
from pathos.multiprocessing import ProcessPool
import multiprocessing
shapes_to_display=[]
products =[ 0,1,2,3,4,5,6,7,8,9]
def hay(i):
print('PROCESSOR ID: ', multiprocessing.current_process().pid, 'Iteration: ', i)
product = products[i]
shapes_to_display.append([i, product])
return shapes_to_display
pool = ProcessPool(nodes=4)
res= pool.map(hay, range(len(products)))
pool.close()
pool.restart()
res = np.asarray(res)
print(res.shape)
for r in res:
r = np.asarray(r)
print(r)
我想要得到的结果是:
(10,) [[0 0], [1,1], .. .. .. [9,9]]
我最终得到的是:
(10,) [[0 0]] [[1 1]] [[2 2]] [[3 3]] [[0 0] [4 4]] [[1 1] [5 5]] [[2
2] [6 6]] [[3 3] [7 7]] [[0 0] [4 4] [8 8]] [[1 1] [5 5] [9 9]]
你们谁能帮我解决这个问题吗?我需要做什么才能按照我想要的方式获得结果?
Q : "What do I need to do to get the result the way I want to ?"
您需要首先了解玩具及其机制
基于进程的 Pathos 分布式计算并不统一 "share" 变量 "across" 所有 远程 进程(恰恰相反,恰恰相反分离这些单独的进程,central和所有分布式 GIL-lock-s 变得并保持独立并自由进行 运行 计算,无需等待在其他情况下无法逃避的 python 解释器 [SERIAL]
-队列工作但等待轮到避免-并发-安全但所有等待的顺序非常低效但是如果轮到它的话,它会在 One_step- 的无尽 GIL 锁等待队列中做少量工作after-Another_step-after- Another_step-...
Pathos 帮你剪掉了这个纯-[SERIAL]
ALL-wait[= 的链条66=]-but-(只是)一个(而且只有一个) -有效.
削减(通过将一些工作发送到完全独立的进程中)也意味着这些进程在实例化时除了原始(主)python 进程的状态之外什么都不知道(是的,它们是由原始 python 解释器的完整副本创建的,包括其整个内部状态——即完成所有 import
-s 并且所有数据结构都被完全复制到一群新的进程副本)。
这有助于完成一些严肃的工作,但对于在远程进程代码执行的远端只完成一些计算步骤的情况来说,所有繁重的炮兵工作都非常昂贵 - 这样的用途-案例永远无法证明为实现这一目标而消耗的附加成本是合理的。
然而,进程独立性也意味着,任何独立进程都不可能(除非明确编程)听到任何其他(仍然独立的)进程中的变量赋值。
因此,如果在进程将其复制到远程解释器之前修改在主解释器中实例化的变量的远程副本,那么执行 .append()
总是很麻烦-独立-实例。
在hay(i)
中做一个return [i, product]
然后pool.map()
将assemble这些各自的结果变成形状并形成你预期。
我试图在下面的代码中创建一个我的问题:
import numpy as np
from pathos.multiprocessing import ProcessPool
import multiprocessing
shapes_to_display=[]
products =[ 0,1,2,3,4,5,6,7,8,9]
def hay(i):
print('PROCESSOR ID: ', multiprocessing.current_process().pid, 'Iteration: ', i)
product = products[i]
shapes_to_display.append([i, product])
return shapes_to_display
pool = ProcessPool(nodes=4)
res= pool.map(hay, range(len(products)))
pool.close()
pool.restart()
res = np.asarray(res)
print(res.shape)
for r in res:
r = np.asarray(r)
print(r)
我想要得到的结果是:
(10,) [[0 0], [1,1], .. .. .. [9,9]]
我最终得到的是:
(10,) [[0 0]] [[1 1]] [[2 2]] [[3 3]] [[0 0] [4 4]] [[1 1] [5 5]] [[2 2] [6 6]] [[3 3] [7 7]] [[0 0] [4 4] [8 8]] [[1 1] [5 5] [9 9]]
你们谁能帮我解决这个问题吗?我需要做什么才能按照我想要的方式获得结果?
Q : "What do I need to do to get the result the way I want to ?"
您需要首先了解玩具及其机制
基于进程的 Pathos 分布式计算并不统一 "share" 变量 "across" 所有 远程 进程(恰恰相反,恰恰相反分离这些单独的进程,central和所有分布式 GIL-lock-s 变得并保持独立并自由进行 运行 计算,无需等待在其他情况下无法逃避的 python 解释器 [SERIAL]
-队列工作但等待轮到避免-并发-安全但所有等待的顺序非常低效但是如果轮到它的话,它会在 One_step- 的无尽 GIL 锁等待队列中做少量工作after-Another_step-after- Another_step-...
Pathos 帮你剪掉了这个纯-[SERIAL]
ALL-wait[= 的链条66=]-but-(只是)一个(而且只有一个) -有效.
削减(通过将一些工作发送到完全独立的进程中)也意味着这些进程在实例化时除了原始(主)python 进程的状态之外什么都不知道(是的,它们是由原始 python 解释器的完整副本创建的,包括其整个内部状态——即完成所有 import
-s 并且所有数据结构都被完全复制到一群新的进程副本)。
这有助于完成一些严肃的工作,但对于在远程进程代码执行的远端只完成一些计算步骤的情况来说,所有繁重的炮兵工作都非常昂贵 - 这样的用途-案例永远无法证明为实现这一目标而消耗的附加成本是合理的。
然而,进程独立性也意味着,任何独立进程都不可能(除非明确编程)听到任何其他(仍然独立的)进程中的变量赋值。
因此,如果在进程将其复制到远程解释器之前修改在主解释器中实例化的变量的远程副本,那么执行 .append()
总是很麻烦-独立-实例。
在hay(i)
中做一个return [i, product]
然后pool.map()
将assemble这些各自的结果变成形状并形成你预期。