Предотвращение высчитывания слишком длинных чисел внутри модуля на PyQt5
Я пишу встроенный калькулятор на PyQt5 и хочу предотвратить зависание от больших чисел. Сам калькулятор импортируется как Calculator из файла calculator.py в main.py. Я пробовал следущее в calculator.py:
import multiprocessing as mp
from sympy import sympify
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QGridLayout, QPushButton
import sys
# ...
def timeout_risk(expr):
return sympify(expr, rational=True)
class Calculator(QWidget):
def __init__(self):
super().__init__()
self.output = QLabel('')
btns = ['2','+', '=']
l = QGridLayout(self)
l.addWidget(self.output, 0, 1)
for i in range(len(btns)):
l.addWidget(QPushButton(btns[i], clicked=self.on_click), 1, i)
def on_click(self):
sender = self.sender()
if sender.text() in ('2','+'):
self.output.setText(self.output.text()+sender.text())
elif sender.text() == '=':
self.calculate(self.output.text())
def calculate(self, txt):
if mp.current_process().name == 'MainProcess':
pool = mp.Pool(1)
async_result = pool.apply_async(timeout_risk, (txt,))
res = async_result.get(timeout=2)
self.output.setText(res)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Calculator()
win.show()
app.exec_()
Но такое решение замедляет программу если pool не в 'main'. Существуют ли другие доступные способы оптимизировать скорость и решить эту проблему на Windows?
P.S. Обработчики TimeoutError в коде есть
Upd: Добавил демо замедления, при импорте я естественно не могу использовать часть 'main'