For loop 如何跳过为每个迭代创建新的池进程?

For loop 如何跳过为每个迭代创建新的池进程?,for-loop,python-multiprocessing,For Loop,Python Multiprocessing,我有以下代码片段 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)

我有以下代码片段

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\u steps

(将注释移动到答案)


池是任务处理程序的集合,将处理队列中的任务。把它想象成商店里处理顾客的收银员。当出纳有空时,他们开始处理下一个客户。
pool
是出纳员,
starmap
创建要处理的客户行

您只需创建一次池(出纳员):


尝试将
pool=mp.pool(4)
放在循环之外(以及
close()
join()
)谢谢您的回答!我在添加你的评论之前就做了。因此,如果一个进程运行多次,就不会有任何问题,对吗?
池是一个任务处理程序的集合,它将处理队列中的任务。把它想象成商店里处理顾客的收银员。当出纳有空时,他们开始处理下一个客户。
pool
是出纳员,
starmap
创建要处理的客户线。非常好的例子!非常感谢@Mike67!
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()