我对 python 并行化有一个非常具体的问题,让我们看看我是否可以解释它,
我想foo()使用多处理库执行一个函数以进行并行化。
# Creation of the n processes, in this case 4, and start it
threads = [multiprocessing.Process(target=foo, args=(i)) for i in range(n)]
for th in threads:
th.start()
该foo()函数是一个递归函数,它深入探索一棵树,直到一个特定事件发生。根据它在树中扩展的方式,此事件可能会在几个步骤中发生,例如 5 个甚至数百万个。树节点是一组元素,在每个步骤中,我从该集合中选择一个随机元素,rand_element = random.sample(node.set_of_elements,1)[0]并相应地进行递归调用,即两个不同的随机元素具有不同的树路径。
问题是,由于某种未知的原因,这些进程显然不能独立运行。例如,如果我并行运行 4 个进程,有时它们会返回此结果。
1, Number of steps: 5
2, Number of steps: 5
3, Number of steps: 5
4, Number of steps: 5
也就是说,所有的过程都走“好路”,并以极少的步骤结束。另一方面,其他时候它会返回这个。
1, Number of steps: 6516
2, Number of steps: 8463
3, Number of steps: 46114
4, Number of steps: 56312
也就是说,所有的进程都走“坏路”。我还没有执行过一次至少有一个走“好路径”而其余走“坏路径”的执行。
如果我按foo()顺序运行多次,超过一半的执行以少于 5000 步结束,但在并发中我没有看到这个比例,所有进程要么快要么慢结束。这怎么可能?
很抱歉,如果我无法向您提供有关程序和执行的更准确的详细信息,但它太大太复杂,无法在这里解释。
慕妹3242003
慕虎7371278
相关分类