Сети Петри - построение дерева достижимости

Как можно вызывать параллельно функцию рекурсивно, что бы они параллельно обрабатывались?

Код работает не корректно: хочу создать дерево последовательно, а не рекурсивно, строя узел, и опускаться пока не выполняется условие остановки.

position = {'p1': ['t1'], 'p2': ['t1', 't1'], 'p3': ['t1', 't3'], 'p4': ['t2']}
transition = {'t1': ['p1'], 't2': ['p2', 'p3'], 't3': ['p4', 'p4']}
marker0 = [1, 0, 1, 0, 'G', None]

def t_out(node):
    t_reacts = []
    for i in transition:
        ind = 0
        for j in position:
            count = 0
            for t in position[j]:
                if t == i:
                    count += 1
            if node[ind] == 'w':
                pass
            elif node[ind] < count:
                break
            ind += 1
        if ind == len(node):
            t_reacts.append(i)
    return t_reacts  # ------------------


def function(t, node):
    t_react_marker = node[:]
    mark_count = 0
    for i in position:
        count = 0
        for j in position[i]:
            if t == j:
                count += 1
        if t_react_marker[mark_count] == 'w':
            pass
        else:
            t_react_marker[mark_count] = t_react_marker[mark_count] - count
        mark_count += 1
    plus_mass = transition[t][:]
    ind = 0
    for i in plus_mass:
        i = int(i[1]) - 1
        plus_mass[ind] = i
        ind += 1
    for i in plus_mass:
        if t_react_marker[i] != 'w':
            t_react_marker[i] += 1
    return t_react_marker  # ---------------


def main(marker0):
    global index0
    marker = marker0[:]
    for i in tree:
        y = tree[i]
        if (y[-2] != 'G') and (y[:-2] == marker[:-2]):
            marker[-2] = 'D'
            tree[index0] = marker
    if marker[-2] != 'D':
        t_j = t_out(marker[:-2])
        if len(t_j) == 0:
            marker[-2] = 'T'
            tree[index0] = marker
        else:
            tree[index0][-2] = 'V'
            z_mass = []
            for i in t_j:
                z = function(i, marker[:-2])
                pos = index0
                pos_mass = []
                while pos != None:
                    pos_mass.append(pos)
                    pos = tree[pos][-1]
                for p in pos_mass:
                    test_z = z[:]
                    ind = 0
                    for j in tree[p][:-2]:
                        if j == 'w' or test_z[ind] == 'w':
                            pass
                        elif j > test_z[ind]:
                            break
                        elif j < test_z[ind]:
                            test_z[ind] = 'w'

                        ind += 1
                    if ind == len(test_z):
                        z = test_z[:]
                        break
                z.append('G')
                z.append(index0)
                index0 += 1
                tree[index0] = z
                z_mass.append(z)

            for each in z_mass:
                main(each)



tree = {0: marker0}
index0 = 0
main(marker0)

Программа работает не корректно, хочу создать дерево последовательно ,а не рекурсивно строя узел и опускаться пока не выполняется условие остановки.


Ответы (0 шт):