Сети Петри - построение дерева достижимости
Как можно вызывать параллельно функцию рекурсивно, что бы они параллельно обрабатывались?
Код работает не корректно: хочу создать дерево последовательно, а не рекурсивно, строя узел, и опускаться пока не выполняется условие остановки.
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)
Программа работает не корректно, хочу создать дерево последовательно ,а не рекурсивно строя узел и опускаться пока не выполняется условие остановки.