如何跳过为每次迭代创建新的 Pool 进程?
How to skip from creating a new Pool process for every iteration?
我有以下代码片段
for self.step in range(0, num_steps):
with torch.no_grad():
pool = mp.Pool(4)
self.step_iter = np.full(shape=len(self.env.agents),
fill_value=self.step, dtype=np.int)
# select action for every agent
action_vector = pool.starmap(Trajectory.select_action,
zip(self.replay_buffer,
self.actors,
self.critics,
self.step_iter,
self.action_size))
pool.close()
pool.join()
问题是每个时间步都会创建一个新的池进程(这需要一些时间)。
有没有办法在 self.step==num_steps
之前的每次迭代中重复使用同一个池?
(移动评论回答)
pool
是任务处理程序的集合,将处理队列中的任务。可以把它想象成 (4) 个处理顾客排队的商店收银员。当收银员可用时,他们开始处理下一位顾客。 pool
是收银员,starmap
创建要处理的客户行。
您只需创建一次池(收银员):
pool = mp.Pool(4) # process handlers
for self.step in range(0, num_steps):
with torch.no_grad():
self.step_iter = np.full(shape=len(self.env.agents),
fill_value=self.step, dtype=np.int)
# select action for every agent
action_vector = pool.starmap(Trajectory.select_action,
zip(self.replay_buffer,
self.actors,
self.critics,
self.step_iter,
self.action_size))
pool.close()
pool.join()
我有以下代码片段
for self.step in range(0, num_steps):
with torch.no_grad():
pool = mp.Pool(4)
self.step_iter = np.full(shape=len(self.env.agents),
fill_value=self.step, dtype=np.int)
# select action for every agent
action_vector = pool.starmap(Trajectory.select_action,
zip(self.replay_buffer,
self.actors,
self.critics,
self.step_iter,
self.action_size))
pool.close()
pool.join()
问题是每个时间步都会创建一个新的池进程(这需要一些时间)。
有没有办法在 self.step==num_steps
之前的每次迭代中重复使用同一个池?
(移动评论回答)
pool
是任务处理程序的集合,将处理队列中的任务。可以把它想象成 (4) 个处理顾客排队的商店收银员。当收银员可用时,他们开始处理下一位顾客。 pool
是收银员,starmap
创建要处理的客户行。
您只需创建一次池(收银员):
pool = mp.Pool(4) # process handlers
for self.step in range(0, num_steps):
with torch.no_grad():
self.step_iter = np.full(shape=len(self.env.agents),
fill_value=self.step, dtype=np.int)
# select action for every agent
action_vector = pool.starmap(Trajectory.select_action,
zip(self.replay_buffer,
self.actors,
self.critics,
self.step_iter,
self.action_size))
pool.close()
pool.join()