Проблема с использованием модуля multiprocessing
Я решил снова написать калькулятор ради интереса и добавить туда возможность вычислить факториал, но при больших числах он работал крайне долго. Тогда я решил добавить мультипоточность, но это не заработало. Я пробовал это устранить, но не получилось
from multiprocessing import Process
rty = 1
def p1():
global t1, rty
t1 = 1
for z1 in range(1, g):
t1 *= z1
print(z1)
rty *= t1
return t1
def p2():
global t2
t2 = 1
for z2 in range(g, h):
t2 *= z2
print(z2)
rty *= t2
return t2
def p3():
global t3
t3 = 1
for z3 in range(h, j):
t3 *= z3
print(z3)
rty *= t3
return t3
def p4():
global t4
t4 = 1
for z4 in range(j, k):
t4 *= z4
print(z4)
rty *= t4
return t4
def p5():
global t5, z5
z5 = 1
t5 = 1
for z5 in range(k, l):
t5 *= z5
print(z5)
rty *= t5
return t5
def p6():
global t6
t6 = 1
for t7 in range(l, w + 1):
t6 *= t7
print(z6)
rty *= t6
while True:
print(rty)
return rty
def fact(f):
global y, g, h, j, k, l, q, w
z5 = 1
y = f
g = f // 6
h = g + g
j = h + g
k = j + g
l = k + g
q = l + g
w = f - q
print(y, g, h, j, k, l, q, w)
u1 = Process(target=p1)
u2 = Process(target=p2)
u3 = Process(target=p3)
u4 = Process(target=p4)
u5 = Process(target=p5)
u6 = Process(target=p6)
u1.start()
u2.start()
u3.start()
u4.start()
u5.start()
u6.start()
def sys(s, s1):
try:
w = ''
while s > 0:
w += str(s % s1)
s //= s1
d = w[::-1]
return d
except Exception:
return 'Mission failed'
def cal(n1: list):
# try:
s = n1[0]
for i in range(1, len(n1), 2):
if n1[i] == '+':
s += n1[i + 1]
elif n1[i] == '-':
s -= n1[i + 1]
elif n1[i] == '/':
s /= n1[i + 1]
elif n1[i] == '*':
s *= n1[i + 1]
elif n1[i] == '**':
s **= n1[i + 1]
elif n1[i] == '//':
s //= n1[i + 1]
elif n1[i] == '%':
s %= n1[i + 1]
elif n1[i] == '!':
fact(n1[0])
elif n1[i] == 'sys':
s = sys(n1[0], n1[2])
elif n1[i] == 'int':
s = int(str(n1[0]), n1[2])
else:
return 'Выражение не распознано, попробуйте ещё'
return s
# except Exception:
# return 'Mission failed'
def beprint():
print('''Вы можете использовать следующие операции:
+ - для сложения
- - для вычитания
/ - для деления
* - для умножения
** - для возведения в степень
// - для целочисленного деления
% - для взятия остатка
! - для вычисления факториала (3 ! = 6)
sys - для перевода числа из десятичной в любую другую систему счисления (4 sys 2 = 100)
int - для перевода числа в десятичную систему счисления из любой другой (100 int 2 = 4)
Для выхода из программы просто нажмите enter''')
return None
def body():
f = [str(i) for i in range(10)]
while True:
h = input('Введите выражение в правильном порядке (2 + 2): ')
n = h.split()
n2 = []
n3 = []
for i in n:
try:
if i[0] in f and '.' not in h:
n2.append(int(i))
elif '.' in h and i[0] in f:
n3.append(float(i))
else:
if len(n2) > 0:
n2.append(i)
elif len(n3) > 0:
n3.append(i)
except Exception:
print("Введите корректные данные")
if len(n2) == 0 and len(n3) == 0:
break
if len(n2) > 0:
print(cal(n2))
else:
print(cal(n3))
def main():
beprint()
body()
if __name__ == '__main__':
main()