使用其他过程(子过程)保存训练时的进度

时间:2019-03-06 14:21:54

标签: python python-3.x multithreading multiprocessing

我有一个遍历游戏树并更新所用节点属性的程序。我如何让一个子进程同时运行以使用新属性更新数据库?

我尝试将它们都作为进程运行,然后将具有更新属性的节点数组传递给将其保存到数据库的进程。我发现的问题是,因为它启动了一个新实例,所以为遍历树而重置了许多变量。

我的代码的简单示例:

walked_nodes = []

class RootTree:
    def __init__(self):
        self.nodes = []

    def train(self):
        self.nodes[0].train()  # In Node.train() appends self to walked_nodes

def main():
    root = RootTree()
    for n in range(999999):
         root.train()
         save_to_db(walked_nodes)  # I want this to be a process  
                                   # loop should be continued without waiting
                                   # for save_to_db to finish

我如何做到这一点:

def main():
    root = RootTree()
    root.train()
    for n in range(999999):
         procs = (Process(target=root.train),
                  Process(target=save_to_db, args=(walked_nodes,)))

         for proc in procs:
             proc.start()

         for proc in procs:
             proc.join()

这将重置settings.py中的root.train()所需的变量。

0 个答案:

没有答案