如何在不同的线程中运行模块的多个功能?

时间:2017-07-02 16:20:53

标签: multithreading python-3.x


我正在开发一个名为monte carlo tree search(MCTS)的项目。在我的项目中,有一个时间有限的主循环。 MCTS模块的psudo代码如下:

import time
class mctsagent:

  def select_node(self):
    # do sth
  def expand(self):
    # do sth
  def roll_out(self):
    # do sth
  def backup(self):
    # do sth

  def search(self, time_budget):
    # main loop
    startTime = time.clock()
    num_rollouts = 0

    while (time.clock() - startTime < time_budget):
      result1 = self.select_node()
      result2 = self.expand(result1)
      result3 = self.roll_out(result2)
      self.backup(result3)
      num_rollouts += 1

我想使用线程来尽可能多地进行迭代 问题是如何开发一个可以利用线程模块在不同线程中运行搜索功能的类。

例如开发这样的模块:

class MCTS_Thread:
  def __init__(self, agent, time_budget):
    self.agent = agent # MCTS module
    self.time_budget = time_budget # The time for running loop
  def run(self):
    self.agent.search(self.time_budget)

然后而不是搜索功能(#main loop)我用这个

def search(self, time_budget):
  threads = []
  for i in range(3):
    # 3 threads running search
    t = MCTS_Thread(self, time_budget)
    threads.append(t)

  for thread in threads:
    thread.start()
  for thread in threads:
    thread.join()

唯一重要的是搜索功能中的函数必须在每个线程中以相同的顺序运行

0 个答案:

没有答案